Пакетная обработка картинок на сервере ImageMagic

Nikolaich
На сайте с 18.05.2005
Offline
132
1160

Всем привет!

Столкнулся сегодня с одной проблемой, несколько часов не могу побороть.

Есть сайт на обычном shared *nix сервере, на сайте несколько десятков тысяч фото разных размеров (под разные задачи, разные превьюшки и т.д.).

Google PageSpeed Insights не в восторге от размеров картинок на страницах, поэтому решили мы их пережать imageMagic'ом через консоль.

Натравливаю IM на тестовую папку с парой тысяч картинок:

find . -type f -regex ".*\.\(jpg\|jpeg\|JPG\|JPEG\)" -exec convert -quality 50% {} {} \;

Ну думаю сейчас пережмет так что PageSpeed Insights будет курить.

По факту размер тестовой папки уменьшился вдвое, т.е. 50% сжатия отработали вроде честно.

Натравливаю PageSpeed Insights на тестовую страницу (с картинками из тестовой папки) и вижу почти тоже самое кол-во очков и предложения уменьшить эту картинку на 80%, ту на 70%...

Скачиваю с гугла архис со сжатыми файлами и начинаю сопоставлять на примере одного файла, который гугл хорошо сжал.

Картинка в формате JPG, размер 134*108px (превьюшка)

Оригинальный размер файла: 46kb

Файл после сжатия в IM: 40kb

Файл сжатый гуглом: 2kb

На всякий случай проверил сжатие через Photoshop на качестве 50%: 6kb

В дальнейшем пробовал экстремальное сжатие IM на 10% качества - меньше 40кб на этой картинке никак %)

Вместо convert пробовал mogrify

find . -type f -regex ".*\.\(jpg\|jpeg\|JPG\|JPEG\)" -exec mogrify -quality 50 {} {} \;

Разницы нет.

Смотрел за счет чего уменьшился размер тестовой папки - за счет больших картинок.

Например картинка весом в 3.7mb пережималась в 700+kb на 50%.

Получается чем меньше картинка тем меньше КПД, что с одной стороны можно понять, но тот же Photoshop и Google жмут как нужно %)

В чем может быть проблема?

Бабло побеждает зло.
ДП
На сайте с 23.11.2009
Offline
203
#1

А imagemagick всякие exif из картинок не удаляет? Может они просто остаются, а по факту нафиг не нужны?

Nikolaich
На сайте с 18.05.2005
Offline
132
#2

Ну что же, сам спросил - сам и отвечу, может кому пригодится:)

Вся соль в мета-данных и параметре strip.

Делаем

find . -type f -regex ".*\.\(jpg\|jpeg\|JPG\|JPEG\)" -exec mogrify -quality 50 -strip {} {} \;  

И вуаля - получаем искомые 2 kb :)

---------- Добавлено 28.03.2017 в 20:09 ----------

Дикий пионер:
А imagemagick всякие exif из картинок не удаляет? Может они просто остаются, а по факту нафиг не нужны?

Вы правы, все дело оказалось в этих данных, нашел решение одновременно с Вашим ответом :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий