2009-09-10 21 views
1

我不知道這是甚至可能與PHP,但我想如果是的話,這裏的人會知道如何。我目前正在開發一個項目,用戶可以自定義一個完整的主體頭像以供整個網站使用。有一堆不同的臉部,頭髮等透明PNG圖像,可以選擇使他們的自定義頭像。我有很好的工作,但這是最難的部分。我希望能夠使用的臉型,髮型,鬍子(如果男性),並自動創建一個將用作他們的小化身爲論壇帖子的80x80圖片等使用PHP自動對齊3個圖像並將其大小調整爲小圖像?

沒有與這幾個障礙。首先,所有圖像都是187x404(大量的圖像是透明的,人物圖像是通過堆疊圖像來實現的,所以人臉圖像實際上並不那麼大)。爲了達到這個目的,圖像必須自動裁剪,以便除去所有多餘的空間,並將實際的臉部,頭髮或鬍鬚部分顯示在80x80的位置。

第二個問題是,一些頭髮或鬍鬚(當放在全​​尺寸的臉部圖像上)將延伸超過80x80並被切掉。所以圖片必須以全尺寸拼湊在一起,然後調整大小以適應80x80。

我知道將3張圖片組合成一張(Combine 2-3 transparent PNG images on top of each other with PHP)的基本方法,但是就我所知。如果我瘋了,這是不可能的,那麼告訴我。我可能會把這個過於複雜化,所以如果你看到並明顯更容易實現這一點,我很樂意聽到它。

回答

1

最簡單的方法就是始終適合臉部/頭髮/鬍鬚在圖像的相同區域。然後把那個區域剪掉。

如果您需要,您可以爲每個圖像存儲額外數據,指定圖像中的一個矩形,必須在小化身中可見。然後在構圖的所有圖像中取出這些矩形的最大末端,然後裁剪+縮小到您的小頭像大小。然而,請注意,將PNG圖像調整爲幾個像素(例如83x83 - > 80x80)會大大降低質量,特別是對於具有大量已定義邊緣的圖像。這是因爲新圖像中有許多像素在原始圖像的4個像素之間[幾乎]均勻分割,並且在邊緣銳利的圖像中會導致模糊。

因此,縮小圖像以適應肖像不僅困難,而且會降低質量。我會切掉鬍子!

0

我可以簡單化,但你可以嘗試:

  1. 跟蹤最大面部的大小尺寸預合成的。

  2. 將合成圖像輸出到臨時文件。從步驟1

  3. 最大值的

  4. 作物正方形調整大小裁剪圖像部分,以80×80

+0

我該如何自動裁剪它?不同的組合會有不同的高度和寬度。 – 2009-09-10 01:06:32

+0

編輯的答案反映了不同的初始臉部大小(鬍鬚)的需求 – 2009-09-10 01:13:04

+0

好吧,我明白你在說什麼,而這在技術上是可行的。但是,如果組合圖像不是最大尺寸,則最終的頭像圖像將比它應該小。 – 2009-09-10 01:19:31

2

我想你需要首先來決定,裁剪,縮放或兩者的組合(裁剪到更大的廣場並調整大小)。

無論如何,如果您已經將圖像合併爲一個,所有三個選項都很容易在PHP中完成。看看imagecopyresampled()

+0

嗯,我認爲這可能是最後一步,但我需要剪掉空白區域然後重新調整大小。不知道我如何去做。 – 2009-09-10 01:07:24

+0

很難說沒有看到你的圖像,但我會嘗試裁剪到標準尺寸,因爲如果你想根據圖像內容的不同而裁剪,你會有更多的工作和你不同的化身的面孔將有不同的尺寸。 – jeroen 2009-09-10 01:17:45