在不丢失 alpha 通道的情况下将 PNG32 文件转换为 PNG8

Lir*_*una 5 png graphics

我使用的是 Linux,无法访问 Adob​​e 的任何“花哨”程序。

我正在尝试将带有 alpha 通道的现有 PNG32 图像转换为 PNG8。我尝试了以下方法:

  • convert original.png PNG8:new.png - 严重扭曲图像并仅保留二进制 alpha(未索引的 alpha)
  • GIMP - 也失败,但产生比 ImageMagick 更好的质量(良好的颜色量化器)。
  • pngcrush -rem alla -reduce -brute original.png new.png - 使图像变小但没有考虑量化(图像少于 256 色),因此输出仍然是 PNG32。

我还能尝试什么?

str*_*ger 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);
Run Code Online (Sandbox Code Playgroud)

将其转储到文件中并运行它:

php convert.php input.png output.png
Run Code Online (Sandbox Code Playgroud)