zaLinux.ru

Как добавить надпись на большое количество изображений


Массовое добавление надписи на изображения

В статье «Как добавить текст на изображения в ImageMagick» показано множество примеров добавления текста с возможностью изменения всех его свойств с помощью программы magick.

Утилита magick является частью пакета ImageMagick. Подробности по установке ImageMagick, в том числе какие зависимости необходимо установить для поддержки максимального количества форматов, а также описание структуры команды, примеры использования и всех опций смотрите в статье: Руководство по ImageMagick: установка, использование и решение проблем.

Но что если нужно добавить текст на десятки или сотни изображений? Данная статья расскажет, как это сделать.

Предположим, имеется задача ко всем JPG файлам в текущей директории добавить текст и сохранить их в указанной папке, при этом каждый файл должен быть записан со своим исходным именем.

Прежде всего, обратим внимание, что для того, чтобы не указывать каждый файл отдельно, мы будем использовать «Подстановочные символы в имени файла», то есть в качестве входного файла мы укажем «*.jpg».

В качестве выходного файла мы будем использовать «Указание шаблона имени файлов».

Некоторые «свойства» должны быть определены особым образом для использования. Например, только «свойства» с префиксом «filename:» могут использоваться для изменения выходного имени файла изображения.

Создадим директорию «withtext»:

mkdir withtext

Следующая команда поочерёдно считает все файлы .jpg в текущей директории, добавит к каждому из них надпись «zaLinux.ru» и сохранит полученные изображения в директорию «withtext» с прежними именами:

magick *.jpg -stroke black -undercolor Red -strokewidth 3 -font Times-New-Roman -pointsize 72 -fill DarkViolet -annotate +650+500 'zaLinux.ru' -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'

Чтобы вам было проще разобраться, в следующем шаблоне убраны ОПЦИИ ДОБАВЛЕНИЯ ТЕКСТА:

magick *.jpg ОПЦИИ ДОБАВЛЕНИЯ ТЕКСТА -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'

В качестве ОПЦИИ ДОБАВЛЕНИЯ ТЕКСТА использованы следующие:

-stroke black -undercolor Red -strokewidth 3 -font Times-New-Roman -pointsize 72 -fill DarkViolet -annotate +650+500 'zaLinux.ru'

Если что-то из этих опций вам не понятно, то обратитесь к статье, ссылка на которую дана выше.

Добавление текста можно комбинировать и с любыми другими операциями, например, следующая команда сжимает все изображения JPEG до 1000 пикселей, добавляет текст с указанными свойствами и сохраняет новые изображения в директорию withtext:

magick *.jpg -scale 1000 -stroke black -undercolor Red -strokewidth 3 -font Times-New-Roman -pointsize 72 -fill DarkViolet -annotate +650+500 'zaLinux.ru' -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'

Как добавить водяной знак на большое количество изображений

В разделе «Как добавить текст с прозрачностью на фотографию. Как сделать полупрозрачный фон для добавляемого текста» показано как добавить прозрачный текст — этот подход можно использовать для добавления водяного знака на большое количество изображений.

Вы также можете сделать обводку текста частично прозрачной (или убрать её вовсе). В следующем примере для обводки (чёрного цвета) и для текста (белого цвета) выбрана прозрачность 0.3:

magick *.jpg -scale 1000 -stroke 'rgba(0,0,0,0.3)' -strokewidth 3 -font Liberation-Serif -pointsize 72 -fill 'rgba(255,255,255,0.3)' -annotate +650+500 'zaLinux.ru' -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'


В следующем примере текст также добавляется на все файлы JPEG в текущей директории, готовые изображения сохраняются в директории withtext. Свойства текста: цвет шрифта белый, с прозрачностью 0.4, цвет фона чёрный, с прозрачностью 0.4:

magick *.jpg -scale 1000 -undercolor 'rgba(0,0,0,0.4)' -font Liberation-Serif -pointsize 72 -fill 'rgba(255,255,255,0.4)' -annotate +650+500 'zaLinux.ru' -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'

Как подобрать размер текста и его координаты в зависимости от размера изображения

В ImageMagick есть возможность делать математические вычисления с использованием различных свойств изображения. Математические вычисления можно делать в конструкции %[fx:…].


Условные обозначения различных свойств изображений вы можете посмотреть на этой странице: https://imagemagick.org/script/escape.php

К примеру, ширина в выражении [fx:…] обозначается буквой «w», а высота буквой «h».

Следующее выражение означает ширина, делённая на 2:

%[fx:w/400]

А это выражение означает ширина минус 400 пикселей:

%[fx:w-400]

Эти выражения можно подставлять в качестве координат опции -annotate.

К примеру, следующае опция -annotate добавит надпись на изображение, расположив эту надпись с отступом на 400 пикселей от правой стороны и 25 пикселей от низа картинки:

-annotate +%[fx:w-400]+%[fx:h-25] 'zaLinux.ru'

Пример полной команды:

magick IMAGE.jpg -pointsize 72 -fill 'rgba(148,0,211,0.5)' -annotate +%[fx:w-400]+%[fx:h-25] 'zaLinux.ru' test.jpg

Автоматический расчёт координат можно использовать в веб-сервисах, для автоматического добавления водяных знаков на фотографии на сайты, либо для пакетной обработки большого количества фотографий.

Следующая команда аналогична уже рассмотренным, она добавляет надпись на все изображения JPEG в текущей папке и сохраняет их в директорию withtext. Особенностью этой команды является то, что она автоматически рассчитывает расположение текста, размещая его на 400 и 25 пикселей от правого нижнего края:

magick *.jpg -scale 1000 -undercolor 'rgba(0,0,0,0.4)' -font Liberation-Serif -pointsize 72 -fill 'rgba(255,255,255,0.4)' -annotate +%[fx:w-400]+%[fx:h-25] 'zaLinux.ru' -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'

А в этой команде размер шрифта, а также отступ от нижнего правого угла вычисляется автоматически, подстраиваясь под ширину и высоту:


magick *.jpg -scale 1000 -undercolor 'rgba(0,0,0,0.4)' -font Liberation-Serif -pointsize %[fx:w/14] -fill 'rgba(255,255,255,0.4)' -annotate '+%[fx:w-(w/2.5)]+%[fx:h-(h/23)]' 'zaLinux.ru' -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'

Обратите внимание, что выражение для вычисления координат теперь взято в кавычки, поскольку в нём используются скобки. Скобки нужны для указания приоритета выполнения математических операций. А кавычки нужны по той причине, что для оболочки Linux скобки имеют специальное значение и для того, чтобы они вместо интерпретации оболочкой отправлялись непосредственно утилите magick, всё значение опции помещено в кавычки.

В следующей команде установлен новый размер изображений, при этом не нужно менять такие параметры надписи как размер шрифта и координаты её расположения — они вычисляются автоматически исходя из ширины и высоты изображения:

magick *.jpg -scale 2000 -undercolor 'rgba(0,0,0,0.4)' -font Liberation-Serif -pointsize %[fx:w/14] -fill 'rgba(255,255,255,0.4)' -annotate '+%[fx:w-(w/2.5)]+%[fx:h-(h/23)]' 'zaLinux.ru' -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'

В предыдущих командах конечный размер изображения указывался явно, то есть все фотографии приводились к одному размеру. Но на самом деле необязательно менять размер картинок. Например, следующая команда выберет подходящий размер шрифта и координаты надписи таким образом, чтобы надпись была крупной и хорошо читаемой и не выходила за пределы изображения — размер шрифта и отступа подбирается для каждой фотографии индивидуально в зависимости от её ширины и высоты:

magick *.jpg -undercolor 'rgba(0,0,0,0.4)' -font Liberation-Serif -pointsize %[fx:w/14] -fill 'rgba(255,255,255,0.4)' -annotate '+%[fx:w-(w/2.5)]+%[fx:h-(h/23)]' 'zaLinux.ru' -set filename:currentfile '%t' 'withtext/%[filename:currentfile].jpg'

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован.