最近有一个需求,需要对 png 和 jpg 格式的图片进行压缩,jpg 格式的图片压缩比较简单,难点主要是针对 png 图片,本想继续采用前篇文章的方式将 png 转为 jpg 图片进行压缩的,但我发现部分转换后的图片出现比较大的问题,图片的背景由其它颜色变成了黑色,那看来不能采用原来的方法,得寻找新的方法,通过查阅资料发现了2个压缩 png 图片的工具 pngquant 和 pngcrush,接下来我就来分别介绍这2个工具。

pngquant

pngquant是一个命令行实用程序,也是一个用于PNG图像有损压缩的库。这种转换大大减少了文件大小(通常多达70%),并保留了完全的alpha透明度。

下载

可以通过官网提供的 gui 程序或者 命令行程序链接下载 pngquant,也可以通过源代码进行编译,我采用了编译好的命令行程序。

参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13

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         打印状态信息

简单使用

压缩单个 png

pngquant –force –verbose –quality=45-85 pngpath

pngquant.exe --force --verbose --quality=45-85 .\gin_prometheus.png

img.png 可以看到图片大小有了较大的压缩,

压缩多个图片

pngquant.exe --force --verbose --quality=45-85 .\*.png

img_1.png

可以看到当前目录下的png图片都被压缩了,并且大小和图片效果都不错。

pngcrush

接下来介绍 pngcrush 这个工具,这个工具是各个论坛相关图像开源项目里推荐比较多的。

安装

安装可以直接下载编译好的程序或者使用源码编译。

使用

pngcrush.exe -reduce -brute .\generics1.png .\generics1_new.png

-brute 是采用多种方法进行暴力压缩,会选取压缩效果最好的进行输出保存。

小结

在简单使用这2个程序的过程中,我发现 pngquant 会比 pngcrush 好很多,不知道是不是参数使用不当的原因,最后我采用 pngquant 进行 png 压缩。

参考