me.neoascetic

Оптимизация изображений, сгенерированных easy-thumbnails (для Django)

Я пользуюсь easy-thumbnails в Django-проектах для генерации превьюшек. Предпочтение ему перед sorl.thumbnail отдано по большей части из-за того, что его юзает замечательный django-filer. И вот однажды, натравив на очередной сайт Google PageSpeed Insights получил от него рапорт, что вот-де, изображения жутко неоптимизированы, можно ужать больше чем в половину.

Как оказалось, виновной оказалась PIL (да, “она”, это же библиотека :D) - ведь изображение генерируется ей. Недолгий поиск привёл меня к issue на github с просьбой добавить сигнал сохранения сгенерированного превью. Осталось лишь навесить подобающий обработчик, что я и сделал.

Смотрим код:

На deb-based требуются установленные пакеты jpegoptim optipng pngcrush advancecomp. Обработчики навешаны на два сигнала: при создании превью и при сохранении изображения - например, через django-filer. Есть нюансы:

Определение типа изображения и, соответственно, какие тулзы к нему применять, основывается на дедовском способе - по расширению. В данный момент поддерживаются JPEG и PNG, их мне вполне хватает. Код функции оптимизации подло выдран из trimage.