PHP:如何在不损失可见质量的情况下压缩图像(自动)


PHP: How to compress images without losing visible quality (automatically)?

我想知道如何自动找出最佳压缩率(小文件大小 + 无质量损失)。

目前,我正在使用imagejpeg()和每个.jpg$quality = 85

PageSpeed(Chrome插件)建议降低一些图像的质量以节省一些kb。减少的百分比是不同的。

我想编写一个 cronjob 来抓取特定目录并优化每个图像。

PageSpeed 或 TinyPNG 如何找出最佳优化质量,这在 PHP 或其他服务器端语言中是否可行?

TinyPNG使用pngquant。

Pngquant可以选择设置所需的质量,类似于JPEG。您可以运行如下内容:

<?php system('pngquant --quality=85 image.png'); ?>

Pngquant网站有示例代码,展示了如何使用PHP的pngquant。


对于JPEG,您可以应用无损jpegcrush

JpegMini(商业)和jpeg-archive(免费)是有损的,可以自动找到JPEG的最低质量。

在PHP中,您可以通过观察重新压缩后文件大小的变化来粗略估计JPEG的压缩量。以相同或更高的质量重新压缩的JPEG文件大小不会有太大变化(但会失去视觉质量)。

如果您重新压缩

JPEG 并看到文件大小减半,请保留重新压缩的版本。如果您看到文件大小仅下降了 10-20%,请保留原始文件。

如果你正在压缩自己,请使用MozJPEG(这是一个在线版本)。