如何利用 pngquant 轻松无损压缩 png 图片?pngquant安装
发布于 作者:苏南大叔 来源:程序如此灵动~

话题说起来有些长,那就是苏南大叔的博客上面的图片,历经多次修改变更,从野蛮发展,到有序整齐。目前来说,图片格式基本上定性为png
。事实上来说,对于seo
来说,博客图片最好是jpg
格式的,而且,这点上,已经得到了苏南大叔的经验验证。但是,jpg
是有损压缩,最终的成品,苏南大叔总是觉得不够清晰愉悦。所以,还是决定使用png
格式。

使用png
做图片格式的话,一个特别大的弊端就是:图片的size
明显偏大。一般来说,一张png
图在300k-500k。而使用jpg
的话,一般来说,在100k左右。
那么,如何在不牺牲图片质量的前提下,压缩图片的体积呢?这就是本篇文章的主要内容:利用pngquant
压缩png
图片。大约可以压缩掉70%
左右的png
体积,而在肉眼看来,图片质量基本上没有大的变化。最终的效果就是:png
图片的清晰度,加上类似jpg
的小体积。
本文的测试环境:centos75
,php72
,pngquant2.12.2
。
基本信息
pngquant
中的quant
的字面翻译,看上去似乎不是太明确。苏南大叔更倾向于翻译为量化
。就是“量化交易”的那个“量化”。连起来就是对png
进行量化
处理的意思。

官方除了提供了源码外,还提供了mac
版本和win
版本可以使用。其中,苏南大叔试用了一下win
版本,是两个bat
文件加上一个exe
文件组成的,把图片拖动到bat
文件上,就可以完成压缩了。那是及其的顺手,相当的好用。不过,mac
是没用看出来咋使用,photoshop
版本也安装失败了。
centos
直接安装 【推荐】
对于centos
服务器来说,直接安装pngquant
即可。

如果你的服务器不是centos
服务器,那么也可以考虑通过源码进行安装。
下载组合源码
pngquant
的github
地址是:https://github.com/kornelski/pngquant 。
不过,下载源码的过程中,要注意一个事情:那就是lib
目录是对应着另外一个开源代码的。缺少lib/
目录时的错误提示如下:

组合方式一(推荐)
下载到的tar.gz
压缩包中,lib
目录可能是空的,需要再次下载。lib/
目录下的源码下载地址是:
如果不知道这两个源码如何组合,就点击pngquant
的github
项目的源码目录,就可以明白如何组合了。

组合方式二
当然,您还可以通过git
命令,直接下载到两者的组合,重点就是参数:--recursive
,这里不做赘述。
这种方式的话,因为一般是在服务器上面执行的,所以要考虑到服务器上面是不是能正常访问github
的问题。

安装过程
处理源码文件权限
得到组合好的源码后,就可以编译了,但是如果编译出错的话,可能是权限问题。苏南大叔把源码目录,都变成了777
。就可以继续下一步了。

安装依赖项目
在继续之前,需要先安装一个依赖,叫做libpng-devel
。

编译安装
接下来的步骤,看起来是和php
的扩展编译过程是非常类似的。

建立软连接(可选)
按理来说,安装完成后,就可以直接使用pnquant
命令了。但是,却没用被系统识别。因为苏南大叔决定:把这个pngquant
建立一个软连接到系统目录即可。

建立好软连接之后,就可以轻松的在命令行里面使用pngquant
命令了。
如何使用
查看pngquant
版本号
回显如下:
基本使用方式
基本使用方式就是:
当然,还有很多其他参数,大家可以看看官方说明,但是苏南大叔试了几下之后,认为其他参数的意义都不是很大。因为苏南大叔做的是图片压缩,所以,就关心一个压缩比而已。
更多参数,可以参考官方网站:
或者查看pngquant
命令的帮助信息:

在php
中使用
当然,对于苏南大叔来说,这个命令就应该是在博客的程序里面进行处理的。也就是说在php
里面进行使用。那么php
调用命令行的时候,需要些比较危险被禁用掉的函数,其中,苏南大叔选择的是:shell_exec
。所以,需要配置一下宝塔面板里面的php72
的php.ini
。如下图所示:

下面的是在php
使用pngquant
的基本方式:
上面这段代码,是苏南大叔从下面的这个地方找到的:
题外话
在photoshop
的程序包里面,苏南大叔也发现了pngquant.exe
的身影,可以证明这款软件的实力了吧?
不过在这种高光时刻,为啥版权信息为空呢?苏南大叔表示:不理解了。

后话
通过上面的方式处理后,苏南大叔的博客上的png
图片得到了非常大的优化,而且图片质量也看不出来有什么变化。苏南大叔表示非常满意。but!有个问题就是:本来设置的好好的渐进式图片显示方式被破坏掉了。所以,苏南大叔不得不再次进行了一次图片处理。当然,变成渐进式图片后,体积又稍稍变大了一点点,不过这点牺牲是值得的。
在苏南大叔的博客里,对于一张普通png
图片,展示到读者面前之前,经过了如下几道工序处理:
非真彩变成真彩色 => 变成渐进式 => 加水印 => pngquant
压缩(非真彩色非渐进式)=> 变成渐进式 。
总结
市面上还有其他的png
图片压缩方案,不过对比上来说,这个pngquant
是免费开源的,压缩效果也非常的好,推荐大家使用。
更多php
相关经验文字,请点击苏南大叔的文章。


