首页 > 解决方案 > 仅在我的服务器网站上压缩图像一次

问题描述

我有一个托管在共享托管包上的网站。我正在使用 Imagick 压缩我的网站 jpg 和 jpeg 上大小超过 100kb 的所有图像,我使用的命令是:对于 JPG:

nice -n 15 find . -type f -size +100000c  -name '*.jpg' -exec convert {} -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB {} \;

对于:JPEG

nice -n 15 find . -type f -size +100000c  -name '*.jpeg' -exec convert {} -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB {} \;

我在我的 cpanel 中的 cron 作业中设置了这两个命令,每天运行一次。

问题是,如果我有一个尺寸很大的图像(例如超过 1Mb),并且压缩后的图像仍然高于 100kb,则脚本将一次又一次地对其应用压缩,直到它小于 100kb。这会导致非常低的 wwww 分辨率和质量差。我如何告诉 imagick 命令只压缩以前未压缩的图像。我考虑只查找最近 24 小时修改过的文件,但我认为这不是正确的解决方案,因为脚本运行时需要时间,并且新压缩的图像可能在同一个 24 小时内。

我认为可行的解决方案是使用“identify -verbose”来检查图像的质量,如果是 85% 则不要压缩。我怎么能用上面的相同代码写这个。或者,如果您有任何其他解决方案,我们将不胜感激。

环顾四周时,我发现了一个建议的解决方案,但我需要使代码正常工作,如下所示:

nice -n 15 find . -type f -size +100000c  -name '*.jpg' | [[ $(identify -format %c {}) != *optimised* ]] && { echo Optimising {}; convert {} -set comment "optimised" -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB {} \; }

我的代码有问题,查找的返回通常存储在 {} 但在这种情况下它显示错误。你能解决这个问题并让它发挥作用吗?

标签: phpcronwebserverhostingimagick

解决方案


假设您无法重命名图像或维护已压缩图像的第二个索引。quality我建议不要依赖于值来探索更新/评估图像的元数据(如“评论”或“关键字”)。

Imagemagick 的identify程序允许您列出/更新元数据。

文档:


推荐阅读