使用 ImageMagick 压缩 PNG 图像

fro*_*sty 6 php compression imagemagick image-processing

要压缩 JPEG 图像,我可以执行以下操作:

$thumb = new Imagick();
$thumb->readImage("url");
$thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
$thumb->setImageCompressionQuality(80);
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 6

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

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

convert rose: -format %k info:
3019
Run Code Online (Sandbox Code Playgroud)

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

convert rose: rose.png
ls -l rose.png
-rw-r--r--@ 1 mark  staff  6975  5 Sep 20:57 rose.png
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在将玫瑰色转换为 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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在将玫瑰色转换为 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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

另外,值得记住的是……通常,透明像素的颜色是无关紧要的,因为您看不到它们,但是统一的东西通常会压缩得更好。因此,在保存 PNG 文件时,使用-alpha background.

例子

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!
Run Code Online (Sandbox Code Playgroud)

  • `转换` **是** ImageMagick。 (6认同)