2 回答

TA貢獻1864條經(jīng)驗 獲得超2個贊
你可以在 ImageMagick 中輕松做到這一點,它分布在 Linux 上,可用于 Windows 和 Mac OSX。除了命令行之外,還有許多 API。以下是如何在 ImageMagick 命令行中執(zhí)行此操作。
輸入:
convert image.png PNG8:result1.png
PNG8:表示 256 色和二進制透明度。這意味著要么完全透明,要么不透明。這會導(dǎo)致邊緣周圍出現(xiàn)混疊(階梯狀)。如果您愿意設(shè)置背景顏色來代替透明度,那么您可以在結(jié)果中保持平滑(抗鋸齒)輪廓。所以對于白色背景。
convert image.png -background white -flatten PNG8:result2.png
ImageMagick 由 PHP Imagick 運行。所以你應(yīng)該可以用 PHP Imagick 做到這一點?;蛘吣梢詮?PHP exec() 調(diào)用 ImageMagick 命令行。

TA貢獻2037條經(jīng)驗 獲得超6個贊
我不認(rèn)為這是奇怪的行為。
PHP 文檔沒有說明這一點,但我想這imagefill()
與大多數(shù)其他應(yīng)用程序一樣:通過使用與填充開始的像素相同的顏色填充連接的像素(0, 0)
。
因為您首先將托盤設(shè)置為 255 像素(或 256),所以您將所有黑暗區(qū)域轉(zhuǎn)換為黑色并失去所有透明度。然后,當(dāng)您從左上角開始填充填充時,所有連接的像素(也在企鵝和鴨子內(nèi)部)將變得透明。
我認(rèn)為沒有 ImageMagick 的唯一方法是遍歷調(diào)整大小圖像的所有像素并將像素顏色手動設(shè)置為有限的托盤。
前段時間我寫了一個小腳本來減少 PNG 的顏色,同時保留完整的 alpha 信息 (1)。這將減少 PNG 文件使用的托盤,從而減少文件大小。如果生成的 PNG 仍然超過 8 位,這并不重要。無論如何,一個小托盤會減小文件大小。
(1) https://bitbucket.org/thuijzer/pngreduce/
編輯:我剛剛使用您調(diào)整大小的 PNG(具有透明度)作為我的腳本的輸入,并僅使用 32 種顏色將其從 12 kB 轉(zhuǎn)換為 7 kB 文件:
Reduced to 62.28% of original, 12.1kB to 7.54kB
編輯 2:我更新了我的腳本并添加了可選的 Floyd-Steinberg 抖動。每個通道有 16 種顏色的結(jié)果:
Reduced to 66.94% of original, 12.1kB to 8.1kB
請注意,抖動也會影響文件大小,因為當(dāng)相鄰像素具有不同顏色時,壓縮 PNG 會“更難”。
- 2 回答
- 0 關(guān)注
- 213 瀏覽
添加回答
舉報