Сжатие изображений на моем сайте сервера ТОЛЬКО ОДИН РАЗ

У меня есть веб-сайт, размещенный в пакете виртуального хостинга.
Я использую 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 {} \;

Я установил эти две команды на своих рабочих местах в cpanel, чтобы они запускались каждый день один раз.

Проблема в том, что если у меня изображение большого размера (например, более 1 МБ), а сжатое изображение по-прежнему превышает 100 КБ, скрипт снова и снова будет применять сжатие к нему, пока оно не станет меньше 100 КБ. Это приводит к очень низкому разрешению и плохому качеству.
Как я могу сказать команде imagick сжимать только изображения, которые не были сжаты ранее. Я думал о том, чтобы найти только файлы, измененные за последние 24 часа, но я не думаю, что это правильное решение, так как при запуске скрипта это займет время, и вновь сжатые изображения могут быть в тех же 24 часах.

Решение, которое, я думаю, сработает, заключается в использовании «точного определения» для проверки качества изображения, если оно составляет 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 {} \; }

у меня есть проблема с этим кодом, возвращение находки обычно хранится в {}, но в этом случае он показывает ошибку.
Вы можете решить это и заставить это работать?

0

Решение

Предполагая, что вы не можете переименовать изображения или поддерживать второй индекс уже сжатых изображений. Вместо того чтобы полагаться на quality значение, которое я бы посоветовал изучить для обновления / оценки метаданных изображения (например, «комментарий» или «ключевые слова»).

Imagemagick-х identify Программа позволяет просматривать / обновлять метаданные.

Документация:

1

Другие решения

Я наконец смог это сделать, я создал команду, которую вы можете разместить на вкладке cron в вашей cpanel и смог сжать все изображения на вашем веб-сервере. Я принял во внимание, что веб-сервер может работать медленно с малыми ресурсами, поэтому я использовал команду «nice -15», чтобы предотвратить перегрузку этого сценария процессором и памятью сервера. Также я установил его запуск каждые 24 часа и добавил условие, что если изображение уже сжато, не сжимайте его снова. просто включите imagick в php в вашей cpanel, затем перейдите на вкладку cron и добавьте эту команду:

nice -n 15 find . -type f -size +100000c  -name "*.jpg" -exec bash -c '[[ $(identify -format "%c" "{}") != *optimised* ]] && { echo Optimising "{}"; convert "{}" -filter Triangle -sampling-factor 4:2:0 -define filter:support=2 -unsharp 0.25x0.25+8+0.065 -dither None -quality 85 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace RGB -strip -set comment "optimised" "{}"; }' \;

эта команда работает на jpg, jpeg и png. jsut замените строку внутри «.jpg» на формат изображения, который вы хотите сжать. Вы можете установить желаемое качество здесь, это 85, также я добавил опцию Imagick из старого поста, который я нашел в интернете, но я изменил его, так как если сжатый файл больше 1 МБ, это займет более 10-20 минут. чтобы сжать его, это из-за опции «-posterize 136», которую я удалил из приведенного выше кода.
Вы можете добавить опцию для этой команды, чтобы найти только те файлы, которые были изменены за последние 24 часа для работы. Таким образом, ранее сжатые изображения будут проходить через эту команду только дважды, в третий раз при выполнении этой команды они не будут проходить изображения. сжатые три дня назад до остальной части команды (не будет вводить условие, чтобы проверить, оптимизирована ли она), это ускорит процесс просмотра всех файлов на сервере, отметьте эту опцию («-mmin n» File’s данные были последний раз изменены n минут назад).

После того, как я закончил, мне нужна помощь, чтобы оптимизировать эту команду, чтобы дать лучшее качество сжатого изображения, и если кто-то может помочь в использовании опции «изменить размер», чтобы изменить размеры изображений, которые больше, чем ширина и высота экрана (изображения, такие как баннеры) и оставьте остальные изображения с размером по умолчанию.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector