#!/bin/bash
# Сам текст подписи. Не забудьте поменять!
TEXT="Copyright. Hombit Inc."
for FILE in "$@"
do
# Высота фотки
HEIGHT=`exiftool -ImageHeight $FILE | perl -pe 's/^.*: //'`
# Ширина фотки
WIDTH=`exiftool -ImageWidth $FILE | perl -pe 's/^.*: //'`
# Подпись должна быть небольшой, по-этому она ориентируется на меньшую сторону фотки
MINDIM=`perl -E "use List::Util qw[min]; say min($HEIGHT,$WIDTH)"`
# Размер шрифта, коэффициент 5/2 подобран эмпирически.
FONTSIZE=$(( $MINDIM / (5/2 * ${#TEXT}) ))
# Длина текста в пикселях. Опять же 4/7 подобран эмпирически.
TEXTLENGTH=$(( ${#TEXT} * $FONTSIZE * 4/7 ))
# Отступ подписи от правого края изображения.
HORIND=$(( $MINDIM / 200 ))
# Сама команда преобразования. Расшифровка некоторых опций:
# -fill — цвет подписи. Установлен белый с непрозрачностью в 15%
# -stroke — цвет контура. Для контраста использован чёрный с непрозрачностью в 20%
# -strokewidth — толщина контура в пикселях
# -monitor показывает прогресс обработки
mogrify -pointsize $FONTSIZE \
-fill 'rgba(255,255,255, 0.15)' \
-stroke 'rgba(0,0,0, 0.2)' -strokewidth 3 \
-draw "rotate -90 gravity SouthEast \
text -$TEXTLENGTH,$HORIND '$TEXT'" \
-monitor \
$FILE
done
exit 0
Для Fedora su -c 'yum install ImageMagick perl-Image-ExifTool' Для Debian/Ubuntu sudo apt-get install imagemagick libimage-exiftool-perlНе забываем сделать файл исполняемым:
chmod +x /path/to/scriptТеперь можно взять любую картинку и применить наш скрипт (осторожно, файл с фотографией перезапишется):
/path/to/script photka.jpgВот примерно то, что мы получим (кликабельно):
/path/to/script *.{jpg,tif}
Однако, я предпочитаю сделать тоже самое, но в несколько параллельных потоков, что значительно ускоряет обработку:ls *.{jpg,tif} | xargs -P4 -iXXX /path/to/script XXX
Число потоков регулируется параметром «-P» и в данном примере равно четырём, подробности смотрите в man xargs.P.S. Жду ваших отзывов и рекомендаций по улучшению! Мне самому не нравится строчка с MINDIM, в ней пришлось использовать perl, так как не понял как коротко и лаконично искать минимум двух целых чисел с помощью bash.

Комментариев нет:
Отправить комментарий