Обычная магия


Признавайтесь, часто ли вам приходится сделать примитивную обработку множества фотографий? Поменять размер, обрезать до квадрата, что нибудь ещё… Если вы для этого используете Photoshop — вы тратите кучу лишнего времени и мы идём к вам.

Добро пожаловать к консольной утилите ImageMagick. Нет, вру, это набор утилит, каждая из которых выполняет свою собственную работу.

Convert — колбасит файл и сохраняет под новым именем

Mogrify — тоже, что и convert, но сохраняет в том же файле. То есть, convert — это Save As…, а mogrify — Save, без as.

Identify выводит всю информацию о файле: разрешение, цветовая модель и т.д.

Предположим, что нам нужно обработать 100500 фоток: уменьшить до 800×600, а потом ещё сделать превью размером 100×100. И конечно фото разной ориентации (портретной и ландшафтной, а не то, что вы подумали).

Уменьшить фото до нужного размера:

convert -quality 80 -resize 800×600 -strip $name «med/$name»;

  • quality — степень компрессии
  • strip — выкинуть лишнюю информацию

Сделать превью для горизонтальных фото:

convert -quality 80 -resize 180×120 -crop 120×120+30+0 -strip $name «sml/$name»;

  • crop — обрезка ширина×высота×отступ_слева×отступ_сверху

Сделать превью для вертикальных фото:

convert -quality 80 -resize 120×180 -crop 120×120+0+30 -strip $name «sml/$name»;

Узнать ширину картинки:

identify -format %w $name

А теперь соберём всё это в небольшой bash-скрипт:

#!/bin/bash
mkdir med;
mkdir sml;
for name in *.jpg; do
    convert -quality 80 -resize 180x120 -crop 120x120+30+0 -strip $name "med/$name";
    IMG_WIDTH=`identify -format %w $name`;
    IMG_HEIGHT=`identify -format %h $name`;
    if [ $IMG_WIDTH -gt $IMG_HEIGHT ]; then
        convert -quality 80 -resize 180x120 -crop 120x120+30+0 -strip $name "sml/$name";
    else
        convert -quality 80 -resize 120x180 -crop 120x120+0+30 -strip $name "sml/$name";
    fi;
done;

Вот такая вот небольшая магия.