У меня есть более 500 изображений, на которые мне нужно нанести водяной знак с текстом, который будет разным для каждого изображения. Например, если у меня есть изображение здания, я хочу поставить водяной знак на название или адрес этого здания.
У меня есть уникальная информация, сохраненная в файле Excel с именем файла изображения.
Теперь, после поиска в течение последних трех дней, я не наткнулся на инструмент, который может пакетировать уникальный текст водяного знака для каждой картинки.
Я в основном работаю в Windows, и мне удобно использовать командную строку для завершения этого процесса. Я также готов потратить немного денег на инструмент для этого, поэтому он не обязательно должен быть бесплатным и/или с открытым исходным кодом.
Вы можете сделать это с помощью команды ImageMagick convert из командного файла, это позволит вам применить текст к файлу, преобразовать тип, изменить масштаб и т. д., и все это за одну операцию — это также бесплатно.
напримерconvert rose.jpg -draw "text 25,60 'By Any Other Name'" outdir/rose.jpg
В качестве альтернативы вы можете использовать python , PIL (библиотека изображений python) или Pillow (форк PIL) и xlrd для автоматического выполнения всей работы, включая чтение из файлов Excel. Это также бесплатные инструменты, но с вашей стороны потребуется немного больше обучения. Я настоятельно рекомендую сделать резервную копию всех ваших изображений, прежде чем пытаться выполнять с ними какие-либо операции.
Просто добавлю - увидев некоторые комментарии к исходному вопросу , что все инструменты, которые я упоминаю в ответе выше, таковы:
Может быть, слишком поздно, но я наткнулся на этот вопрос 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 .
Ник Дикинсон-Уайлд
njackson.gis
матдм
njackson.gis
Ник Дикинсон-Уайлд
njackson.gis