Image Magick: оптимизация изображений для веб-сайтов

У меня есть камера, которая делает фотографии размером 3008x2000 пикселей. Я использую Image Magick для масштабирования и изменения размера фотографий, которые будут размещены на моем веб-сайте. Размер изображений, которые я использую на веб-сайте, составляет 602x400. Я использую эту команду для уменьшения размера:

convert DSC_0124.JPG -scale 20% -size 24% img1.jpg

Это создает изображение размером 602x400 пикселей. Но размер файла всегда будет выше 250 КБ. Больше изображений на одной HTML-странице означает, что страница будет тяжелее, а время загрузки увеличится. Есть ли какие-нибудь функции в магии изображений, которые помогут мне сохранить размер файла как можно меньше, возможно, ниже 100 КБ. Но размер изображения должен быть таким же, то есть 602х400px. Я добился аналогичной оптимизации с помощью инструмента SEAMonster для MS Windows. Поскольку у него нет альтернативы командной строки, это не очень поможет, когда нужно преобразовать сотни изображений.


person nixnotwin    schedule 13.08.2011    source источник


Ответы (4)


Используйте команду, как предложил Делан, с дополнительным флагом «-strip», чтобы удалить данные EXIF, это резко уменьшило размер некоторых моих изображений. Вот bash-скрипт для unix-платформ, но вторую часть можно использовать только для отдельных образов.

for X in *.jpg; do convert "$X" -resize 602x400 -strip -quality 86 "$X"; done

Это преобразует все изображения в каталоге.

person Ross    schedule 13.08.2011
comment
Предупреждение: использование convert с одинаковыми именами входного и выходного файлов может быть небезопасной операцией. Либо запишите имя временного файла и условно mv временный файл перезапишите оригинал, либо просто используйте mogrify (часть пакета ImageMagick). На справочной странице для mogrify(1) указано, что Mogrify перезаписывает исходный файл изображения, тогда как convert(1) записывает в другой файл изображения. - person Clint Pachl; 14.12.2014

Используйте -quality для установки уровня сжатия:

convert DSC_0124.JPG -scale 20% -size 24% -quality [0..100] img1.jpg
person Delan Azabani    schedule 13.08.2011

Вы можете определить максимальный размер выходного изображения в 100 КБ следующим образом:

convert DSC_0124.JPG -resize 602x400! -strip -define jpeg:extent=100KB img1.jpg
person Mark Setchell    schedule 30.07.2014
comment
Будьте осторожны, ! флаг для изменения размера игнорирует соотношение сторон, а ! может быть специальным символом оболочки, который обычно необходимо экранировать. - person Clint Pachl; 14.12.2014

Если вы используете свой веб-сайт на PHP, вы можете рассмотреть сценарий изменения размера изображения SLIR, он отлично справляется с изменением размера в соответствии с различными ограничениями (см. Ниже) и кэширует результаты.

Parameters:
w    Maximum width
h    Maximum height
c    Crop ratio
q    Quality
b    Background fill color
p    Progressive

http://shiftingpixel.com/2008/03/03/smart-image-resizer/

http://code.google.com/p/smart-lencioni-image-resizer/

person Matt Montag    schedule 14.08.2011