使用ImageMagick压缩PNG图像

时间:2015-09-05 13:19:12

标签: php image-processing compression imagemagick

要压缩JPEG图像,我可以这样做:

$thumb = new Imagick();
$thumb->readImage("url");
$thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
$thumb->setImageCompressionQuality(80);

但是,我还需要压缩PNG图像(保持Alpha透明度)以减小尺寸。有没有办法用ImageMagick做到这一点?

2 个答案:

答案 0 :(得分:3)

pngquant有效地量化或减少图像中的颜色数量,直到质量明显下降之前。您可以像ImageMagick一样尝试类似的东西...

首先,使用内置的rose:图片,检查图片中的颜色数量 - 它是3,019:

convert rose: -format %k info:
3019

并制作一个PNG并检查大小 - 它是6,975字节

convert rose: rose.png
ls -l rose.png
-rw-r--r--@ 1 mark  staff  6975  5 Sep 20:57 rose.png

enter image description here

现在将玫瑰色转换为255种颜色并检查大小 - 它下降到3,691字节:

convert rose: -colors 255 rose255.png
ls -l rose255.png
-rw-r--r--  1 mark  staff   3691  5 Sep 21:02 rose255.png

enter image description here

现在将玫瑰色转换为64种颜色并检查尺寸 - 低至2,361字节

convert rose: -colors 64 rose64.png
ls -l rose64.png
-rw-r--r--  1 mark  staff  2361  5 Sep 21:04 rose64.png

enter image description here

优化或减少PNG文件大小的另一种方法是使用-strip去除图像中的任何元数据 - 例如拍摄照片的日期和时间,相机和镜头模型,程序的名称创建了图像以及版权和颜色配置文件。

另外,值得注意的是......通常,透明像素的颜色无关紧要,因为你无法看到它们,但是统一的东西通常压缩得更好。因此,使用-alpha background保存PNG文件时,使所有透明像素的颜色相同可能是个好主意。

示例

convert -size 512x512 xc:gray +noise random a.png                                      # create an image of random noise
-rw-r--r--@ 1 mark  staff  1576107  6 Sep 11:37 a.png                                  # 157kB

convert -size 512x512 xc:gray +noise random -alpha transparent a.png                   # recreate but make transparent
-rw-r--r--@ 1 mark  staff  1793567  6 Sep 11:38 a.png                                  # 179kB, extra transparency channel

convert -size 512x512 xc:gray +noise random -alpha transparent -alpha background a.png # make all transparent pixels black
-rw-r--r--@ 1 mark  staff  1812  6 Sep 11:38 a.png                                     # Presto!

答案 1 :(得分:0)

使用-set colorspace Gray设置灰度不会降低PNG的文件大小,除非还使用了这些选项:

-define png:compression-level=9 -define png:format=8 -define png:color-type=0 -define png:bit-depth=8

这使得8位灰度具有最高的PNG压缩。添加这些选项会使我的图像尺寸缩小3倍,因为现在它是一个通道(灰度),而在它之前是3(RGB)。