php - 仅在我的服务器网站上压缩图像一次
问题描述
我有一个托管在共享托管包上的网站。我正在使用 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 {} \; }
我的代码有问题,查找的返回通常存储在 {} 但在这种情况下它显示错误。你能解决这个问题并让它发挥作用吗?
解决方案
假设您无法重命名图像或维护已压缩图像的第二个索引。quality
我建议不要依赖于值来探索更新/评估图像的元数据(如“评论”或“关键字”)。
Imagemagick 的identify
程序允许您列出/更新元数据。
文档:
推荐阅读
- apache-spark - 错误:连接中缺少已解决的属性
- r - Program to iterate through lists within a list
- reactjs - OnSelect dosnt 与 react-Google-places-autocomplete 一起使用
- python-3.x - 如何从 Matplotlib 渐变中选择颜色
- angular - Angular Universal 使用为窗口分配功能
- java - MySQL 检查列中是否已有内容
- android - 使用深色主题时,MaterialDatePicker 和 TimePickerDialog 的样式不同
- python - Python pandas:获取组的第一个值
- ruby-on-rails - 为什么 RailsAdmin 加载我的编辑视图这么慢?
- continuous-integration - 如何在 Gitlab 上运行的 CI 作业中仅重试失败的测试?