我正在使用 Linux,无法访问任何 Adobe 的“花哨”程序。
我正在尝试将带有 alpha 通道的现有 PNG32 图像转换为 PNG8。我尝试了以下方法:
convert original.png PNG8:new.png
- 严重扭曲图像并仅保留二进制 alpha(非索引 alpha)- GIMP——同样失败,但是比 ImageMagick 产生更好的质量(良好的色彩量化器)。
pngcrush -rem alla -reduce -brute original.png new.png
- 使图像更小但没有考虑量化(图像少于 256 种颜色),所以输出仍然是 PNG32。
我还可以尝试什么?
答案1
这个 PHP 脚本使用 libgd 完成了这个任务:
<?PHP
if(!isset($argv[1]) || !is_readable($argv[1])) {
echo "Creates an 8-bit PNG from a 32-bit PNG\n\n";
echo "Usage:\n";
echo "\t" . $argv[0] . " input.png > output.png\n";
echo "\t" . $argv[0] . " input.png output.png\n";
die();
}
$inFile = $argv[1];
$outFile = $argv[2] or STDOUT;
$inImage = imagecreatefrompng($inFile);
$outImage = imagecreate(imagesx($inImage), imagesy($inImage));
imagecopy($outImage, $inImage, 0, 0, 0, 0, imagesx($inImage), imagesy($inImage));
imagepng($outImage, $outFile);
将其转储到文件中并运行:
php convert.php input.png output.png
答案2
我知道我有点迟了,但是最近这对我正在从事的一个网络项目造成了影响。
我用了pngnq进行批量转换,我的 PNG8 从未如此出色。事实上,使用最高采样率 ( -s 1
) 时,结果几乎与完整的 PNG32 难以区分。
答案3
答案4
使用pngquant,但请确保您使用的是 1.6 以上的版本。最新版本具有非常好的量化器,在各种情况下都远胜于 PHP 的 libGD。
Debian wheezy 仍然包含13岁版本输出质量低下。好的 pngquant 包适用于 Debian 实验版和大多数其他 Linux 发行版。
如果您的发行版只有过时的pngquant
,那么请使用pngnq
。