При выгрузке каталогов товаров на внешние сайты или отображении фото в системе часто возникает задача защиты контента с помощью водяного знака (watermark). Разберем, как реализовать наложение водяного знака на картинку, какие ограничения есть у платформы 1С и какие архитектурные подходы наиболее эффективны.
Проанализируем базовые возможности платформы. Встроенный объект Картинка и язык встроенных сценариев 1С не предназначены для попиксельной графической обработки. В платформе нет внутренних методов для совмещения слоев, управления прозрачностью (альфа-каналом) или рисования поверх существующих растровых файлов.
Если наложить водяной знак визуально в интерфейсе (например, поверх элемента формы или в объекте ТабличныйДокумент), водяной знак отобразится на экране, но исходный файл двоичных данных картинки не изменится. При передаче файла на сайт или сохранении на диск из 1С будет выгружен оригинальный файл без изменений.
Рассмотрим основные рабочие способы решения этой задачи.
С точки зрения архитектуры учетной системы 1С — это программа для ведения учета, а не графический редактор. Хранение изображений с уже нанесенными водяными знаками прямо в информационной базе приводит к неоправданному увеличению размера базы данных и дублированию файлов при выгрузке на разные торговые площадки.
Оптимальное решение — хранить в 1С (или во внешнем хранилище) чистые оригиналы фото высокой четкости, а водяной знак накладывать средствами CMS (например, 1С-Битрикс) при загрузке или формировании превью на сайте:
Если требуется формировать изображения с водяным знаком непосредственно на стороне 1С, наиболее распространенным способом является использование внешних графических утилит, таких как ImageMagick.
Разберем по шагам алгоритм взаимодействия с утилитой из 1С:
ЗапуститьПриложение.Картинка или двоичные данные.Пример команды для консоли, которую можно сформировать из 1С:
КомандаЗапуска = "composite -gravity center -watermark 30% ""C:\Temp\watermark.png"" ""C:\Temp\source.jpg"" ""C:\Temp\result.jpg""";
ЗапуститьПриложение(КомандаЗапуска, , Истина);
В операционной системе Windows наложение водяного знака можно выполнить без сохранения файлов во внешние программы — через объекты .NET framework и библиотеку System.Drawing.
Проанализируем порядок действий:
Bitmap.Graphics из исходной картинки.ImageAttributes для создания эффекта полупрозрачного слоя.DrawImage, наложив водяной знак поверх оригинального изображения с нужными координатами и размерами.Для работы в кроссплатформенном режиме (Windows / Linux) без использования внешних командных утилит применяются внешние компоненты Native API, написанные на C++ или C#.
Компонента подключается в 1С через метод ПодключитьВнешнююКомпоненту и принимает двоичные данные исходного файла и водяного знака, возвращая готовый бинарный поток с результатом наложения.
При работе с большим массивом изображений обратите внимание на следующие моменты: