Обработка массива изображений в Линукс (ресайз, логотип, подпись)
Сегодня продолжим публикацию статей из цикла “… рано начинать я не планировал, но так сказать жизнь заставила…” речь пойдет о групповой обработки фотографий (массива фотографий), а именно о ресайзе.
Какое решение можно найти? В Линуксе есть множества программ которые с успехом справляются с всем вышеперечисленным мною, я же остановил свой выбор на мультиплатформенной консольной программе Imagemagik, это мощный пакет утилит, с просто гигантским мануалом как минимум страниц на 300, на английском языке. В правдивости моих слов можно убедиться перейдя на страницу самой программы.
Пакет ImageMagick состоит из:
animate – Анимирует последовательность изображений.
composite – Смешивает несколько изображений в одно имеющееся.
convert – Конвертирует изображение между разными форматами.
conjure – Обрабатывает MSL скрипт для создания изображения.
compare – Сравнивает изображение с восстановленным изображением.
display – Показывает изображение.
identify – Описывает формат и характеристики файла изображения.
import – Осуществляет захват окна (скриншот) XWindow.
montage – Монтирует (смешивает) несколько изображений в одно новое.
mogrify – Преобразует требуемое изображение.
Эта программа позволяет автоматизировать процесс обработки массива изображений по средствам использования скриптов (скрипты писать необходимо самому, используя возможности bash’a). Например, можно легко изменить размеры сразу 1000 изображений, а потом проставить на всех логотип, подпись и т.д.
Т.е. мы нащелкали на фотокамеру 2 Gb фотографий, всё это скопировали себе на HDD, заливать в интернет фотографии по 3,5 Mb как то обломно, занимает много времени и съедает порой дорогостоящий трафик. Мало того HDD тоже не резиновый, особенно остро это ощущается если фотографируешь много и на профессиональную камеру где фотографии сохраняются с разрешением RAW, вес таких фоток может переваливать за 10Mb на фотку.
Установим программу командой:
1 | sudo aptitude install imagemagick |
Теперь, непосредственно к механизму работы ImageMagick.
Для изменения размера изображения нам потребуется утилита convert. У неё довольно обширные возможности, однако, нас интересует изменение размера и jepg-качества картинки. Это действие производится с помощью команды:
1 | convert -resize n -quality m исходный-файл.jpg конечный-файл.jpg |
Где n — желаемая ширина в пикселях, например 800×600, а m — желаемое jpeg-качество, например 90. Если вместо конечный-файл.jpg задать исходный-файл.jpg, то утилита преобразует исходный файл и заменит его новой, уменьшенной (или увеличенной) версией.
Для того, чтобы нанести watermark на фотографию, потребуется утилита composite:
1 | composite -gravity northeast -dissolve i знак.jpg исходный-файл.jpg конечный-файл.jpg |
Эта команда встроит ваш watermark.png в правый нижний (northeast) угол картинки, прозрачность (точнее, непрозрачность) задаётся значением i. Исходный файл также, как и в случае с предыдущей командой, может быть заменён конечным.
Пример получения скриншота в формате png после трёхсекундной задержки, захватив при этом рамки окон (заголовок, края):
1 | import -pause 3 -frame -screen screenshot.png |
Следует заметить, что также производится сжатие изображения.
Так же для ресайза массива фотографий можно использовать команду:
1 | mkdir NEW; for f in *.jpg ; do convert -quality 90 -resize 800x600 "$f" "lowres/${f%.jpg}-NEW_PHOTO.jpg" ; done |
Эта команда: создаёт подкаталог NEW в текущем каталоге (mkdir NEW); далее для всех файлов с разрешением .jpg вызывает программу конвертации.
Программа конвертации сохраняет уменьшенные изображения в подкаталоге NEW под именем с окончанием -800.jpg. Так, если в исходном каталоге были изображения с именами S01924.jpg, S01925.jpg, то после выполнения указанной команды должен появиться подкаталог NEW/ с изображениями S01924-NEW_PHOTO.jpg, S01925-NEW_PHOTO.jpg,
Теперь непосредственно о автоматизации всех вышеперечисленных операций. Для этого мною были написаны 3 разных скрипта, использовать их можно в зависимости от цели или предпочтений пользователя.
Скрипт №1
my_favorite.sh
Тело скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash echo " " echo "--==Created by Alex Berber==--" echo "--===www.linuxspace.org==--" echo " " mkdir NEW_RESIZE_PHOTO; for i in *.JPG ; do echo "Working on $i ..." convert -quality 90 -resize 800x600 "$i" "NEW_RESIZE_PHOTO/${i%.JPG}-NEW.JPG" ; done echo " " echo "... Done!" echo " " exit 0 |
Как использовать этот скрипт?
Помещаете его в директорию с фотографиями и запускаете командой:
1 | sh my_favorite.sh |
Что делает это скрипт?
В текущей директории создает новую папку с именем NEW_RESIZE_PHOTO и складывает в нее готовые (перересайзенные) копии фотографий, добавляя к имени приставку -NEW.
Качество = 90
Разрешение = 800х600
Скрипт №2
inside.sh
Тело скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | !/bin/bash echo " " echo "--==Created by Alex Berber==--" echo "--===www.linuxspace.org==--" echo " " for i in *.JPG; do echo "Working on $i ..." mogrify -resize 800 $i; done echo " " echo "... Done!" echo " " exit 0 |
Как использовать этот скрипт?
Помещаете его в директорию с фотографиями и запускаете командой:
1 | sh inside.sh |
Что делает это скрипт?
В текущей директории ресайзит все фотографии с разрешением *.JPG
Скрипт №3
gilbert.sh
Тело скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | !/bin/bash WATERMARK="/home/booch/watermark.png" echo " " echo "--==Created by Alex Berber==--" echo "--===www.linuxspace.org==--" echo " " for i in *.JPG ; do echo "Working on $i ..." convert -adaptive-resize 1024x1024 -quality 90 $i $i 2> /dev/null composite -gravity southeast -dissolve 75 $WATERMARK $i $i 2> /dev/null done echo " " echo "... Done!" echo " " exit 0 |
Как использовать этот скрипт?
Помещаете его в директорию с фотографиями и запускаете командой:
1 | sh gilbert.sh |
Что делает это скрипт?
Скрипт использует для обработки фотографий сразу две программы, это convert, composite.
convert — Непосредственно производит конвертирование фотографий.
composite — Накладывает водяной знак на ваши фотографии.
Готовые скрипты можно скачать введя в терминале команду:
1 | wget http://www.linuxspace.org/wp-content/uploads/2008/files/{gilbert.sh,inside.sh,my_favorite.sh} |
Продолжение следует…
Viewed 3142 times by 1631 viewers
Комментарии (2)
Other Links to this Post
RSS-лента комментариев к этой записи. TrackBack URI



By skevearcase, 6 Январь 2009 @ 4:01
Спасибо, интересно было прочитать.
By goglus, 1 Июнь 2009 @ 12:44
спасибо теперь конверчу cdr пачками
mkdir SVG;
for i in *.cdr ;
do
echo «Working on $i …»
uniconvertor «$i» «SVG/${i%.svg}.svg» ;