Сжатие изображений на моем сайте сервера ТОЛЬКО ОДИН РАЗ - PullRequest
0 голосов
/ 20 декабря 2018

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

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

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Я наконец смог это сделать, я создал команду, которую вы можете поместить на вкладку 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 голосов
/ 20 декабря 2018

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

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

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

...