Водяной знак — это полупрозрачный логотип или текст, который накладывается поверх изображения, чтобы защитить контент от копирования и продвинуть бренд. В 1С-Битрикс наложение выполняется на лету при выводе картинки, а оригинал остаётся нетронутым.
CFile::ResizeImageGet() и у компонентов вывода изображений. Готовые галереи (например, «Фотогалерея 2.0») имеют настройку водяного знака прямо в параметрах компонента.Что такое водяной знак и как он работает в Битрикс
Водяной знак (watermark) — это дополнительный слой, который платформа рисует поверх исходного изображения в момент формирования уменьшенной или адаптированной копии. Сам файл-оригинал в медиабиблиотеке при этом не изменяется: знак появляется только на генерируемой копии.
В 1С-Битрикс поддерживаются два типа знаков:
- Текстовый — произвольная надпись выбранным шрифтом (например, адрес сайта или «© Компания»);
- Графический — картинка с логотипом, обычно PNG с прозрачным фоном.
Технически знак накладывается через параметр watermark функции ресайза изображений. Для работы требуется установленное расширение GD (входит в стандартную поставку окружения BitrixVM), а для полупрозрачности PNG — поддержка альфа-канала.
Где включается наложение
Единой галочки «включить водяные знаки на весь сайт» в ядре нет. Наложение задаётся в одном из трёх мест в зависимости от того, как выводятся изображения:
| Способ вывода | Где настраивается знак |
|---|---|
| Готовые галереи (Фотогалерея 2.0, каталог) | Параметры компонента, вкладка с настройками картинки |
| Свойство инфоблока типа «Картинка» | Через ресайз в шаблоне компонента |
| Произвольный вывод в коде | Массив watermark в CFile::ResizeImageGet() |
Для типовых интернет-магазинов удобнее всего задавать знак в шаблоне вывода изображения товара, так знак применится ко всем позициям каталога сразу.
Текстовый водяной знак через ресайз
Самый гибкий способ — наложить знак при вызове ресайза. Функция принимает массив описаний водяных знаков, каждый со своим типом и позиционированием.
- Откройте шаблон компонента, который выводит изображение (например,
detail.phpдетальной страницы). - Найдите вызов
CFile::ResizeImageGet()или добавьте его для нужного файла. - Передайте четвёртым параметром массив с типом
text.
Пример вызова с текстовым знаком:
$img = CFile::ResizeImageGet($fileId, array('width'=>600,'height'=>600), BX_RESIZE_IMAGE_PROPORTIONAL, true, array(array('type'=>'text','coefficient'=>'1','text'=>'© mysite.ru','font'=>'/local/fonts/arial.ttf','color'=>'FFFFFF','fill'=>'text','position'=>'bottomright')));
Ключевые ключи массива: text — сама надпись, font — путь к TTF-шрифту на сервере, color — цвет в HEX, position — угол или центр наложения.
Графический знак (логотип PNG)
Логотип в PNG с прозрачностью смотрится аккуратнее текста. Порядок такой же, но тип знака — image:
- Загрузите PNG-логотип на сервер, например в
/local/templates/main/images/watermark.png. - В массиве водяного знака укажите
'type'=>'image'и путь в ключе'file'. - Задайте прозрачность через
'alpha_level'— значение от 0 до 100.
Пример:
array('type'=>'image','file'=>$_SERVER['DOCUMENT_ROOT'].'/local/templates/main/images/watermark.png','alpha_level'=>'40','fill'=>'exact','position'=>'center')
fill => exact— знак выводится в исходном размере;fill => resize— знак масштабируется под изображение;fill => repeat— знак замостит всю площадь плиткой.
Для полупрозрачного PNG указывайте путь именно к файлу с уже заложенным альфа-каналом — тогда знак впишется в любой фон.
Позиция, размер и прозрачность
Позиция задаётся ключом position. Доступные значения делятся на угловые и центральные:
| Значение | Расположение |
|---|---|
topleft / topcenter / topright | Верхний ряд |
center | По центру изображения |
bottomleft / bottomcenter / bottomright | Нижний ряд |
Рекомендации по подбору:
- Прозрачность
alpha_levelдержите в диапазоне 30–50: знак виден, но не мешает восприятию картинки; - Для защиты от обрезки используйте
fill => repeat— замощение сложнее удалить; - Коэффициент
coefficientдля текста управляет размером шрифта относительно картинки.
Частые ошибки
Типовые проблемы, из-за которых знак не появляется или выглядит не так:
- Знака нет вообще. Ресайз возвращает кэшированную копию без знака — очистите папку
/upload/resize_cache/и обновите страницу. - Чёрный прямоугольник вместо логотипа. PNG без альфа-канала или нет поддержки прозрачности в GD — пересохраните файл как PNG-24 с прозрачным фоном.
- «Кракозябры» в тексте. Шрифт не поддерживает кириллицу — укажите TTF с русскими глифами (не системный по умолчанию).
- Шрифт не найден. Путь в ключе
fontуказан относительно, а не от корня сервера — используйте абсолютный путь через$_SERVER['DOCUMENT_ROOT']. - Знак поверх оригинала. Часто ошибочно ждут, что модифицируется сам файл. Оригинал не меняется — знак только на ресайз-копии, это правильное поведение.
- Знак не масштабируется. На маленьких превью крупный логотип перекрывает всё — используйте
fill => resizeили отдельный набор параметров для thumbnail.
Итог
Водяные знаки в 1С-Битрикс накладываются на лету при ресайзе, поэтому оригиналы изображений остаются чистыми, а знак можно в любой момент изменить или отключить. Для готовых галерей достаточно параметров компонента, для собственного вывода — массива watermark в CFile::ResizeImageGet().
Практический минимум: подготовьте PNG-логотип с прозрачностью, задайте alpha_level около 40, выберите позицию и не забывайте очищать кэш ресайза после смены настроек. Если знак нужен по всему каталогу и с гибкими правилами — вынесите логику в шаблон или отдельный обработчик.