Пакетное добавление водяных знаков с уникальным текстом для каждого изображения

У меня есть более 500 изображений, на которые мне нужно нанести водяной знак с текстом, который будет разным для каждого изображения. Например, если у меня есть изображение здания, я хочу поставить водяной знак на название или адрес этого здания.

У меня есть уникальная информация, сохраненная в файле Excel с именем файла изображения.

Теперь, после поиска в течение последних трех дней, я не наткнулся на инструмент, который может пакетировать уникальный текст водяного знака для каждой картинки.

Я в основном работаю в Windows, и мне удобно использовать командную строку для завершения этого процесса. Я также готов потратить немного денег на инструмент для этого, поэтому он не обязательно должен быть бесплатным и/или с открытым исходным кодом.

Добро пожаловать в рекомендации по программному обеспечению! Нам понадобится немного больше информации, чтобы дать хорошие рекомендации здесь. Пожалуйста, взгляните на Что требуется, чтобы вопрос содержал «достаточно информации»? Тогда, пожалуйста, отредактируйте свой вопрос и посмотрите, сможете ли вы включить как минимум некоторые из этих улучшений: Какая ОС или веб-приложение приемлемо? Только GUI или только CLI или и то, и другое?
Спасибо, я должен был сделать это до того, как написал. Первоначально я разместил этот вопрос на photo.stackexchange.com, но, похоже, это расстроило некоторых людей.
@njackson.gis Не "расстроен". Просто это было неподходящее место для этого.
@mattdm я не говорил о твоем посте. это полезно. Я имел в виду другие посты. Я видел много вопросов о водяных знаках и обработке изображений на этом сайте, и именно поэтому я решил сначала опубликовать там. спасибо за ваше предложение!
@njackson.gis Является ли чтение файла Excel обязательным требованием или вы не против сохранить его в формате CSV или в каком-либо другом формате?
@NickWilde Excel не является обязательным требованием. На самом деле я был в процессе преобразования его в простой текстовый формат, чтобы попытаться использовать его в ImageMagick.

Ответы (2)

Вы можете сделать это с помощью команды ImageMagick convert из командного файла, это позволит вам применить текст к файлу, преобразовать тип, изменить масштаб и т. д., и все это за одну операцию — это также бесплатно.

напримерconvert rose.jpg -draw "text 25,60 'By Any Other Name'" outdir/rose.jpg

В качестве альтернативы вы можете использовать python , PIL (библиотека изображений python) или Pillow (форк PIL) и xlrd для автоматического выполнения всей работы, включая чтение из файлов Excel. Это также бесплатные инструменты, но с вашей стороны потребуется немного больше обучения. Я настоятельно рекомендую сделать резервную копию всех ваших изображений, прежде чем пытаться выполнять с ними какие-либо операции.

Обновлено:

Просто добавлю - увидев некоторые комментарии к исходному вопросу , что все инструменты, которые я упоминаю в ответе выше, таковы:

  • Бесплатно (бесплатно)
  • Бесплатно (с открытым исходным кодом)
  • Кроссплатформенность, в частности:
    • Работа с графикой командной строки ImageMagik :
      • Загрузка бинарных файлов для Unix, Mac OS(X), Windows и Linux
      • Исходный код доступен, так что вы, вероятно, можете собрать его для чего угодно еще.
    • Язык программирования Python :
      • Доступны двоичные файлы Windows
      • Обычно уже установлен на ОС, Linux, Unix и многих других.
      • То же самое исходный источник
    • Библиотека обработки изображений PIL / Pillow :
      • Двоичные файлы доступны для Windows
      • Устанавливается из исходного кода, если у вас есть Python/PIP на других платформах.
    • Библиотека чтения XLRD Python Excel
      • Распространение исходного кода работает на любой платформе Python
Стив, это делает свое дело. Я только что преобразовал свой Excel в .txt, а затем создал пакетный файл, чтобы добавить текст. Спасибо, что указали мне на это программное обеспечение!
Рад слышать, что это сработало для вас @njackson.gis

Может быть, слишком поздно, но я наткнулся на этот вопрос 2 недели назад и нашел решение, написав код:

Мне удалось решить аналогичную проблему с bulkWaterMark и .NET, где вы можете помечать динамический текст водяными знаками с помощью функции, называемой выражениями. Я использовал бесплатную версию инструмента и написал собственный подключаемый модуль контекста выражения, который загружает данные из файла xml, в котором хранится информация об изображении. Затем я написал выражение, которое принимает имя файла текущего изображения в качестве параметра и ищет его в файле xml — все это делается на C#.

Проблема заключалась в том, что нет доступной документации SDK, и я также не уверен, что этот интерфейс плагина официально общедоступен, но вам просто нужно наследовать 2 или 3 класса и переопределить некоторые методы для внедрения собственного кода в приложение. Тогда это работало как шарм.

Вам просто нужно сослаться на сборку PMlabs.GrfX.Framework и создать собственную реализацию этих трех классов:

 - ExpressionsPlugIn<TExpressionContext>
 - ExpressionContext
 - Expression<TExpressionContext>

Класс Expression — это функция, которая вызывается при рендеринге изображения. Контекст содержит несколько выражений, а класс подключаемого модуля содержит контекст. Просто убедитесь, что вы реализовали все в абстрактном классе Expression, остальные — это просто вспомогательный код.

После компиляции сборки подключаемого модуля поместите ее в папку bin/plugins вашей установки bulkWaterMark.

Другое редактирование: сегодня опубликовал упрощенный код моего решения на Github: https://github.com/barnacleboy/bulkWaterMarkExpressionPlugin .