php环境,如何在服务器端使用pngquant压缩图片?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
费力气在服务器端配置好了pngquant
之后,如果想在php
中进行调用处理图片的话,还需要进行一些配置。
本文测试环境:centos@7.7.1908
,php@7.3
,libpng@1.6.37
,pngquant@2.7.10
。
安装pngquant
安装pngquant
,请参考下面的文章:
安装libpng
,libpng-devel
,参考下面的文章:
重新安装pngquant
的依赖,参考下面的文章:
启用exec函数
因为是在服务器端执行命令行,所以启用了一个危险函数shell_exec()
。
不开启shell_exec()
的话,还可以换成其它函数,但是都是算在危险函数里面的。所以,想清楚后再开启,责任自负。
启用php扩展
gd2.so
和fileinfo.so
这两个扩展算是相关扩展,gd2.so
一般都是默认开启的,而fileinfo.so
一般都是要手工开启。如下截图,是在宝塔面板里面一键开启fileinfo
的截图。
php相关代码
先检测是不是png
图片(由fileinfo
扩展提供的功能),然后利用pngquant
对图片进行压缩。
$source_info = getimagesize($source_path);
$source_width = $source_info[0];
$source_height = $source_info[1];
$source_mime = $source_info['mime'];
// ...
if ($source_mime == "image/png") {
try {
$compressed = shell_exec("pngquant --force --quality=50-80 - <" . escapeshellarg($saved_path));
if ($compressed) {
file_put_contents($saved_path, $compressed);
$im2 = imagecreatefrompng($saved_path);
@imageinterlace($im2, TRUE);
//@imagealphablending($im2, TRUE);
//@imagesavealpha($im2, true);
imagepng($im2, $saved_path);
} else {
//throw new Exception("Conversion to compressed PNG failed.");
}
} catch (Exception $e) {
//print $e->getMessage();
}
}
这段代码中的思路,可以参考下面的文章:
相关链接
总结
在php
中使用pngquant
,可以对png
类型的图片进行服务器端压缩。fileinfo
扩展是用来检测图片类型的。更多文章,请参考苏南大叔的pngquant
系列文章:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。