2011-07-07 41 views
3

我需要創建具有不透明度的PNG徑向漸變。我已經通過GDLib看過,但我無法看到生成徑向漸變的方法。有誰知道用GDlib或PHP的任何其他圖形庫的方式嗎?PHP中具有不透明度的徑向漸變

我想最糟糕的情況是我可以使用GDLib逐像素地生成它,但是人們甚至開始對此做數學運算?

目標是爲網頁生成性感照明效果背景PNG。 header here使用this background image可以看到效果的一個例子。我已經嘗試了通用的白色燈光效果PNG,但它看起來並沒有像有色照明一樣好,所以我生成的PNG會考慮網站的顏色方案。

我認爲服務器端是要走的路,因爲CSS radial gradients的瀏覽器支持是如此的零散。

+1

GD是一個快速而髒的圖像操縱器。簡單的操作就是遊戲的名稱。徑向操作是先進的東西,不適合GD。你可以嘗試一下Gimp,它有一個完整的腳本界面和大多數語言的綁定(雖然不是PHP,顯然)。 –

+0

這是要在沒有X的Linux網絡服務器上執行 - 我不知道我在讓Gimp運行方面有多成功 – Tak

+2

gimp有一個命令行「批處理」模式,因此它可以無頭運行。 –

回答

1

爲什麼不使用imagecolorallocatealpha()imageellipse()imagefilledellipse()的組合?

編輯:

爲我的意思的例子見this class。你應該能夠擴展這個以支持alpha。

EDIT2:

我已經取得了一些修改到類上面,得到的α支持。它並不完美,但它適用於橢圓和這樣的:

http://codepad.org/1eZ3Km0J

+0

這很有趣。它迭代地增加顏色,然後繪製一系列逐漸變小的實心橢圓。然而,我並不清楚可以在alpha通道上繪製橢圓:gd函數似乎使用RGB通道隱含性(?) – horatio

+0

@horatio我通過創建127個不同的相同顏色的不透明度來測試aib的數學用'imagecolorallocatealpha()'然後用那些渲染像素。我猜這同樣可以應用於同心'imagefilledellipse()' – Tak

+0

更新了基於Ozh代碼的示例的答案。 –

1

經典的視頻遊戲技巧是應用漸變紋理,而不是計算光線。這是該技術的完美使用。

在一個很大的像素尺寸(2048px正方形是常見的)和幾個較小的(1024,512,256px等)中選擇一個最接近你需要的灰度梯度(放大可能會誇大條帶,縮小可能會引入莫爾)。

使用php gd函數,如imagecopymerge。根據意圖,您可以在第一次使用時存儲結果。

+0

聽起來不錯,但我想將該漸變紋理應用爲動態純色的不透明貼圖(如果這是一個短語)... – Tak

+0

ahh。我*想*你需要設置alpha通道,然後分別使用GD – horatio

+0

設置像素。但是,您可以再次採樣或指定頁面背景顏色,將漸變複製到純色圖像上,然後複製將結果合併到您想要的圖像上。顯然不是一個真正的alpha通道解決方案。 – horatio

1

我想最壞的情況下,我可能會產生 它逐像素使用GDLib但如何 沒有一個甚至開始做數學上的 那?

數學很容易,alpha = max_alpha - (distance_to_center/radius)其中距離是歐幾里得,即sqrt((x1-x2)^2 + (y1-y2)^2)

+0

我得到一個菱形漸變而不是圓形。我不知怎的搞砸了嗎? – Tak

+0

它是否需要更多π和sin/cos?我的數學不是很好,如果你能指出我的方向很好,那就很好。剩下的代碼就完成了\ o/ – Tak

+0

就像老玩笑一樣:pi R圓形,蛋糕r平方。 – horatio