ImageMagick и миниатюры

July 5, 2011, revised October 1, 2012 ImageMagick JPEG Paperclip Ruby обработка изображений

Открытие дня - оказывается, настройки ImageMagick по умолчанию далеки от идеальных, если говорить о генерации уменьшенных версий изображений.


Зачем платить больше?

Если на страничке каталога показывается 10 изображений – значит пользователь загружает 600 лишних килобайт.

Увы, именно эти настройки использует Paperclip. (И твой велосипед на PHP тоже.)

Параметр -strip убирает из картинки EXIF-данные и цветовые профили. С вероятностью 99% на загружаемых пользователем фотографиях эти данные будут.

Параметр -quality указывает качество сохранения JPEG. По умолчанию ImageMagick использует качество 92 - так, видимо, безопаснее, но для картинки-миниатюры размером 100х100 такое качество совсем не нужно.

-quality 92 вышеприведенная картинка занимает 5 килобайт.)

Чтоб спасти от заблуждений Paperclip, нужно добавить в has_attached_file параметр convert_options:

class Post
  has_attached_file :image, 
    :styles => {:thumb => '100x100'}, 
    :convert_options => {:thumb => '-strip -quality 50'},
end

И, напоминаю, пересоздать все миниатюры для Paperclip можно одной командой Rake:

rake paperclip:refresh CLASS=Post

Разумеется, процедура эта будет долгая. Можно получить большую долю выгоды одним удалением профилей. С этим справится непосредственно ImageMagick:

find public/system -iname "*.jpg" | xargs mogrify -strip

У меня из 6.1G изображений осталось 4.9G, а размер главной страницы сократился на 150 килобайт. Неплохо, да?

Buy Me a Coffee at ko-fi.com