У меня есть веб-сайт, размещенный в пакете виртуального хостинга.Я использую Imagick для сжатия всех изображений на моих веб-сайтах jpg и jpeg, размер которых превышает 100 КБ, я использую команду: Для 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 {} \;
Я настраиваю эти две команды на своих заданиях cron в своей cpanel для запуска каждый день один раз.
Проблема в том, что если у меня есть изображение такого размера (например, более 1 МБ), а сжатое изображениевсе еще выше 100 КБ сценарий будет применять сжатие снова и снова, пока оно не станет меньше 100 КБ.Это приводит к очень низкому разрешению и плохому качеству.Как я могу сказать команде 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 {} \; }
У меня естьпроблема с этим кодом, возврат поиска обычно хранится в {}, но в этом случае он показывает ошибку.Можете ли вы решить эту проблему и заставить ее работать?