Настройка водяных знаков на фотографиях товаров 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка водяных знаков на фотографиях товаров 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка водяных знаков на фотографиях товаров 1С-Битрикс

Конкурент скачивает фотографии с каталога и использует их у себя. Это происходит именно потому, что на изображениях нет идентификатора магазина. Водяной знак — минимальная защита, но она работает как барьер для ленивого копирования.

Где Битрикс обрабатывает изображения

Все изображения в Битрикс проходят через модуль main, класс CFile. Ресайз и конвертация происходят при обращении к методу CFile::ResizeImageGet() или при генерации миниатюры через компонент. Физически обработанные файлы кешируются в /upload/resize_cache/.

Водяной знак не встроен в стандартный CFile. Битрикс предоставляет класс \Bitrix\Main\Diag\Image и обёртку \Bitrix\Main\IO\File, но обработка водяного знака реализована в отдельном функционале — через настройки модуля main в административной части.

Встроенный механизм: настройки модуля main

В административной части (/bitrix/admin/settings.php?lang=ru&mid=main) есть раздел «Водяные знаки». Параметры сохраняются в b_option с модулем main:

  • use_watermark_text — использовать текст как водяной знак
  • use_watermark_image — использовать изображение
  • watermark_text — текст водяного знака
  • watermark_text_color — цвет в формате R,G,B
  • watermark_text_size — размер шрифта
  • watermark_position — позиция (TL, TC, TR, CL, CC, CR, BL, BC, BR)
  • watermark_image_path — путь к файлу-изображению для водяного знака
  • watermark_image_alpha — прозрачность (0–100)

Встроенный механизм применяет водяной знак при вызове CFile::ResizeImageGet() с параметром $bUseWatermark = true. Компонент bitrix:catalog.element по умолчанию не передаёт этот параметр — нужно явно указать в параметрах компонента или в шаблоне.

Программное наложение через GD

Для нестандартного позиционирования или динамического контента водяного знака (например, цена, дата) используется прямая работа с GD:

function applyWatermark(string $sourcePath, string $outputPath): void
{
    $info = getimagesize($sourcePath);
    $src  = match($info[2]) {
        IMAGETYPE_JPEG => imagecreatefromjpeg($sourcePath),
        IMAGETYPE_PNG  => imagecreatefrompng($sourcePath),
        IMAGETYPE_WEBP => imagecreatefromwebp($sourcePath),
        default        => throw new \RuntimeException('Unsupported format'),
    };

    $wmPath = $_SERVER['DOCUMENT_ROOT'] . '/local/watermark.png';
    $wm     = imagecreatefrompng($wmPath);

    $srcW = imagesx($src);
    $srcH = imagesy($src);
    $wmW  = imagesx($wm);
    $wmH  = imagesy($wm);

    // Позиция: правый нижний угол с отступом 10px
    $destX = $srcW - $wmW - 10;
    $destY = $srcH - $wmH - 10;

    imagecopy($src, $wm, $destX, $destY, 0, 0, $wmW, $wmH);

    match($info[2]) {
        IMAGETYPE_JPEG => imagejpeg($src, $outputPath, 90),
        IMAGETYPE_PNG  => imagepng($src, $outputPath),
        IMAGETYPE_WEBP => imagewebp($src, $outputPath, 85),
    };

    imagedestroy($src);
    imagedestroy($wm);
}

Кеширование и производительность

Водяной знак не должен накладываться при каждом запросе. Обработанное изображение кешируется в /upload/watermarked/{$fileId}/ с именем, включающим хеш параметров водяного знака. При изменении логотипа или позиции — хеш меняется, кеш инвалидируется автоматически.

Для массовой обработки существующих изображений: агент или CLI-скрипт итерирует b_file по полю MODULE_ID = 'iblock' и обрабатывает файлы батчами по 50–100 штук. На 10 000 изображений при среднем размере 200 КБ обработка занимает 15–30 минут на нормальном сервере.

Что настраиваем

  • Параметры встроенного водяного знака в b_option для модуля main
  • Передачу флага bUseWatermark в компонентах каталога
  • Кастомную функцию наложения через GD для нестандартных требований
  • Директорию кеша /upload/watermarked/ с правильными правами
  • Агент для массовой обработки существующих изображений
  • Исключение: изображения определённых категорий или брендов без водяного знака