【发布时间】:2019-05-20 12:41:24
【问题描述】:
我有一个托管在共享主机包上的网站。 我正在使用 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 {} \; }
我对这段代码有问题,查找的返回通常存储在 {} 中,但在这种情况下它显示错误。 你能解决这个问题并让它发挥作用吗?
【问题讨论】:
标签: php cron webserver hosting imagick