使用 ImageMagick 压缩 PNG 图像 [英] Compress a PNG image with ImageMagick
问题描述
要压缩 JPEG 图像,我可以这样做:
To compress a JPEG image, I can do:
$thumb = new Imagick();
$thumb->readImage("url");
$thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
$thumb->setImageCompressionQuality(80);
但是,我还需要压缩 PNG 图像(保留 alpha 透明度)以减小尺寸.有没有办法用 ImageMagick 做到这一点?
However, I need to also compress PNG images (preserving alpha transparency) to keep sizes down. Is there a way to do it with ImageMagick?
推荐答案
pngquant
有效地量化或减少图像中的颜色数量,直到质量出现明显下降之前.你可以像这样在 ImageMagick 中尝试类似的东西......
pngquant
effectively quantizes, or reduces the number of colours in an image till just before there is a discernible drop in quality. You can try something similar in ImageMagick like this...
首先,使用内置的rose:
图像,检查图像中的颜色数量——它是3019:
First, using the built-in rose:
image, check the number of colours in the image - it is 3,019:
convert rose: -format %k info:
3019
并制作一个 PNG
并检查大小 - 它是 6,975 字节
and make a PNG
of it and check the size - it is 6,975 bytes
convert rose: rose.png
ls -l rose.png
-rw-r--r--@ 1 mark staff 6975 5 Sep 20:57 rose.png
现在将玫瑰色转换为 255 种颜色并检查大小 - 它减少到 3,691 字节:
Now convert the rose to 255 colours and check the size - it is down to 3,691 bytes:
convert rose: -colors 255 rose255.png
ls -l rose255.png
-rw-r--r-- 1 mark staff 3691 5 Sep 21:02 rose255.png
现在将玫瑰色转换为 64 色并检查大小 - 减少到 2,361 字节
Now convert the rose to 64 colours and check the size - down to 2,361 bytes
convert rose: -colors 64 rose64.png
ls -l rose64.png
-rw-r--r-- 1 mark staff 2361 5 Sep 21:04 rose64.png
另一种优化或减少 PNG 文件大小的方法是使用 -strip
从图像中去除任何元数据 - 例如拍摄照片的日期和时间、相机和镜头型号、名称创建图像的程序以及版权和颜色配置文件.
Another way of optimising or reducing PNG filesizes is to use -strip
to strip out any metadata from images - such as the date and time the picture was taken, the camera and lens model, the name of the program that created the image and the copyright and colour profiles.
另外,请记住...通常情况下,透明像素的颜色是无关紧要的,因为您看不到它们,但是统一的东西通常会压缩得更好.因此,在保存 PNG 文件时,使用 -alpha 背景
将所有透明像素设为相同颜色可能是个好主意.
Also, worth bearing in mind... normally, the colour of transparent pixels is irrelevant because you can't see them, but uniform things generally compress better. So, it may be a good idea to make all transparent pixels the same colour when saving PNG files, by using -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!
这篇关于使用 ImageMagick 压缩 PNG 图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!