Использование GraphicsMagic для пакетного изменения размеров изображений
Конечно пару / десяток фотографий можно и руками, можно в Фотошопе, можно ещё поискать программы, да скрипты под это дело заточенные.. Но, это ведь не так интересно, как написать пару строк в консоли и всё само чтобы обработалось красиво. Тут тебе и удовольствие от сделанного, и опыт который в будущем обязательно пригодится и материал для сайта, добрым людям в помощь.
Один важный момент, всё происходит не в OS Windows, a в OS Ubuntu.
Устанавливаем отличный пакет для работы с изображениями GraphicsMagick. Именно GraphicsMagick а не ImageMagick. Почему? Просто это более продвинутый форк.
Кстати, под Windows он тоже устанавливается, так - что при небольшом шаманстве этот же подход можно и там использовать.
После такой долгой прелюдии, всего-то строка кода:
find -name "*.JPG" | while read f; do gm -convert -scale 800 $f thumbs/$f; done
JPG — расширение обрабатываемых файлов.
800 — Целевая ширина конвертации.
thumbs/ — Папка, в которую будут складываться уменьшенные изображения.
done — Признак конца операции.
В случае, если название нужно немного изменить — добавить постфикс _sm для уменьшенных превьюшек, можно
написать так:
find -name "*.JPG" | while read f; do gm -convert -scale 200 "$f" "thumbs/${f%.*}_sm.jpg"; done
Дополнительно может понадобится изменить регистр букв в именах всех файлов, так-как некоторые особо
продвинутые фотоаппараты упорно ставят расширение в верхнем регистре.
В этом случае пишем:
rename 'y/A-Z/a-z/' *
Ну и если очень хочется добавить водяные знаки, чтобы никто просто так не мог фотографии скачать с
Вашего сайта и выдать за свои, то это сделать тоже не сложно:
composite -dissolve 55 -gravity SouthEast watermark_image.png target_image.jpg result_image.jpg
Или в цикле:
find -name "*.JPG" | while read f; do composite -dissolve 55 -gravity SouthEast watermark.png "$f" "wat/${f%.*}"; done
55 — Степень прозрачности накладываемого изображения.
SouthEast — Константа определяющая положение накладываемого изображения. Может принимать одно из следующих значений:
NorthWest, North, NorthEast, West, Center, East, SouthWest, South, или SouthEast.
watermark_image.png —Путь до файла накладываемого изображения.
target_image.jpg — Путь до целевого файла с фотографией.
result_image.jpg — Путь и название результирующего файла.
Ещё:
gm mogrify -resize 120x120! imagename.jpg
изменит размер изображения на 120x120 не взирая на соблюдение пропорций.
Или в цикле:
(
ВНИМАНИЕ!
Этот скрипт
ПАРЕЗАПИШЕТ
существующие фотографии их уменьшенными копиями, так-что сначала скопируйте изображения которые
будете конвертировать в отдельную папку!)
find -name "*.JPG" | while read f; do gm mogrify -resize 120x120! "$f"; done
Если задача состоит в том, чтобы привести все изображения к одной ширине, вне зависимости от их
ориентации, то подойдёт такой код:
gm -convert -geometry '650^x436^' target_image.jpg result_image.jpg
Тут: '650^x436^' - максимальные ширина или высота,
символ крышки ^ - признак того, что данное значение будт использоваться в качестве максимального.
Или в цикле:
find -name "*.JPG" | while read f; do gm -convert -geometry "650^x436^" "$f" "thumbs/${f%.*}_sm.jpg"; done
Обработка 200 фотографий по 2.5Мб каждая заняла у меня около 4 минут.
Вот и всё!
Успешной, приятной и эффективной работы!
Павел Осипов
2011.07.19
Наверх