3 minutes reading time
最近有一个需求,需要对 png 和 jpg 格式的图片进行压缩,jpg 格式的图片压缩比较简单,难点主要是针对 png 图片,本想继续采用前篇文章的方式将 png 转为 jpg 图片进行压缩的,但我发现部分转换后的图片出现比较大的问题,图片的背景由其它颜色变成了黑色,那看来不能采用原来的方法,得寻找新的方法,通过查阅资料发现了2个压缩 png 图片的工具 pngquant 和 pngcrush,接下来我就来分别介绍这2个工具。
pngquant是一个命令行实用程序,也是一个用于PNG图像有损压缩的库。这种转换大大减少了文件大小(通常多达70%),并保留了完全的alpha透明度。
可以通过官网提供的 gui 程序或者 命令行程序链接下载 pngquant,也可以通过源代码进行编译,我采用了编译好的命令行程序。
options:
--force 覆盖原来输出的图片
--skip-if-larger 仅当原来图片小于原图片时才保留
--output file 输出的文件路径
--ext new.png 为输出文件名设置自定义扩展名。默认情况下使用-or8.png或-fs8.png。
--quality min-max 指示使用达到或超过最高质量pngquant所需的最少颜色。如果转换导致质量低于最低质量,则图像将不会被保存(如果输出到标准输出,将输出 24 位原始图像)并将以状态码 99 退出。pngquant
min和max是 0(最差)到 100(完美)范围内的数字
--speed N 从 1(暴力)到 10(最快)的速度/质量权衡。默认值为 3。速度 10 的质量降低 5%,但比默认值快 8 倍。
--nofs 禁用 Floyd-Steinberg dithering
--posterize N output lower-precision color (e.g. for ARGB4444 output)
--strip remove optional metadata (default on Mac)
--verbose 打印状态信息
pngquant --force --verbose --quality=45-85 pngpath
pngquant.exe --force --verbose --quality=45-85 .\gin_prometheus.png
可以看到图片大小有了较大的压缩,
pngquant.exe --force --verbose --quality=45-85 .\*.png
可以看到当前目录下的png图片都被压缩了,并且大小和图片效果都不错。
接下来介绍 pngcrush 这个工具,这个工具是各个论坛相关图像开源项目里推荐比较多的。
安装可以直接下载编译好的程序或者使用源码编译。
pngcrush.exe -reduce -brute .\generics1.png .\generics1_new.png
-brute 是采用多种方法进行暴力压缩,会选取压缩效果最好的进行输出保存。
在简单使用这2个程序的过程中,我发现 pngquant 会比 pngcrush 好很多,不知道是不是参数使用不当的原因,最后我采用 pngquant 进行 png 压缩。