PHP+Imagick - PNG压缩

8

我如何高效压缩PNG图像? 在我的情况下,这些图像是带透明度的小灰度图像。

目前我正在尝试以下方法:

// ...

$im->setImageFormat('png');
$im->setImageColorspace(\Imagick::COLORSPACE_GRAY);
$im->setImageCompression(\Imagick::COMPRESSION_LZW);
$im->setImageCompressionQuality(9);
$im->stripImage();
$im->writeImage($url_t);

由于Imagick并未提供“COMPRESSION_PNG”选项,因此我尝试了LZW算法进行压缩,但文件大小几乎没有变化(通常甚至比之前更大)。
如果我在GIMP中打开图像并直接保存,文件大小会大幅度减小(例如11,341 B -> 3,763 B或11,057 B -> 3,538 B)。
那么,使用Imagick正确的压缩PNG图像的方法是什么?

1
相关阅读:http://www.imagemagick.org/Usage/formats/#png_quality - Pekka
@pekka,感谢你提供的链接!但是我不确定它是否适用于php。我尝试使用00-99压缩保存我的图像,文件大小的差异最多只有10%。但是简单的GIMP保存可以将文件大小降低到约三分之一。我还有其他做错的地方吗? - Czechnology
3
我遇到了同样的问题...不幸的是,我还没有找到一个好的答案。 - Joshua Burns
2个回答

3

嗨,我已经找到了一些解释这个问题的定义。问题在于,即使我尝试了所有可能的质量值,图像仍然比使用GIMP或类似应用程序保存时要大得多。 - Czechnology
如果你同时使用Gimp和IM生成的图像,建议你查看使用identify -verbose a.png命令输出的差异。也许Gimp使用了8位深度,而你的ImageMagick设置为使用16位深度?或者Gimp删除了之前存在的颜色配置文件?或者Gimp使用了一种“调色板”,有效地限制了使用的颜色数量? - Kurt Pfeifle
如果您发布一对此类PNG文件的样本链接,我可以分析差异,然后告诉您一个IM(命令行)调整方法,使您可以直接从IM(因此也是从IMagick)创建更小的PNG文件... - Kurt Pfeifle

0

我不确定这是否是保存PNG的正确方法,但我的方法是:

$im->setImageCompression(\Imagick::COMPRESSION_UNDEFINED);
$im->setImageCompressionQuality(0);

这使我得到了完美的图像质量,文件大小非常接近于PS6保存的“保存为Web”。有时甚至可以获得更小的文件大小!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接