【问题标题】:PHP: How to compress images without losing visible quality (automatically)?PHP:如何压缩图像而不损失可见质量(自动)?
【发布时间】:2016-05-29 18:08:12
【问题描述】:

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

目前我对每个.jpg 使用imagejpeg()$quality = 85

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

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

PageSpeed 或TinyPNG 如何确定最佳优化质量,这是否可以通过 PHP 或其他服务器端语言实现?

【问题讨论】:

  • 您已经在缓存imagejpeg() 调用,对吧?
  • @Pekka:是的,我愿意。我会以 100% 的质量调整图像的大小。 cronjob 稍后会对其进行优化。 85%的质量只是因为我还没有算法。

标签: php image cron compression server-side


【解决方案1】:

TinyPNG 使用pngquant

Pngquant 具有设置所需质量的选项,类似于 JPEG。你可以运行类似的东西:

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

Pngquant website has example code showing how to use pngquant from PHP.


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

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

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

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

如果您要压缩自己,请使用MozJPEG(这里是online version)。

【讨论】:

  • 我试过 jpegcrush 但似乎没有效果。这个 perl 脚本只帮助我减少了 10% 的文件大小。 Jpegmini 和 tinyjpg 可以做到 70%。有没有更好的免费脚本可以做到这一点?
  • @TomSawyer jpegcrush 是无损的,并获得最佳的文件大小/质量比。其他的则不是,并且相当于以较低质量重新保存文件,添加更多失真并可能具有较低的文件大小/质量比。如果一个工具为您节省了 70% 的 JPEG,这意味着您创建的文件的质量设置非常浪费。
  • 我不这么认为。我尝试用 jpgmini 和 tinyjpg 压缩许多文件,几乎它们中的大多数将被压缩至少 50%,并且质量是相同的,或者你可以通过你的肉眼分辨出有什么不同。以上两项服务将我的文件大小减少了 70%,但 jpegcrush 最多可以减少 10%。您应该尝试上述两种服务以查看差异
  • @TomSawyer 当我说无损/有损时,我的意思是压缩术语的上下文,其中“无损”意味着 100% 像素完全按位相同,而不是“在我看来相同”。丢失你用肉眼看不到的细节是好的,但它被称为有损是有原因的。
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多