Автоматическая настройка водяных знаков в 1С-Битрикс

Настройка автоматического наложения водяных знаков 1С-Битрикс Представьте: вы импортируете 10 000 товаров через CSV, каждое с 3 изображениями. Итого 30 000 картинок. Без автоматизации пришлось бы вручную накладывать водяной знак на каждую — процесс на неделю. Менеджеры забывают, версии с водяным
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Автоматическая настройка водяных знаков в 1С-Битрикс
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1460
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    764
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    809
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1165

Настройка автоматического наложения водяных знаков 1С-Битрикс

Представьте: вы импортируете 10 000 товаров через CSV, каждое с 3 изображениями. Итого 30 000 картинок. Без автоматизации пришлось бы вручную накладывать водяной знак на каждую — процесс на неделю. Менеджеры забывают, версии с водяным знаком путаются, лишние копии забивают диск. Нужен перехват на уровне события загрузки файла. Мы, как сертифицированные Bitrix-разработчики с 5+ лет опыта, реализовали уже 50+ проектов по защите изображений. Предлагаем настроить автоматическое наложение под ключ. Свяжитесь с нами — оценим ваш проект и предложим оптимальное решение.

Как работает обработчик OnBeforeFileAdd?

В Битрикс файлы загружаются через CFile::SaveFile() и CFile::Add(). Событие OnBeforeFileAdd позволяет перехватить загрузку до сохранения на диск. Обработчик получает массив $fileFields и идентификатор модуля $moduleId. Пример кода:

AddEventHandler('main', 'OnBeforeFileAdd', function(&$fileFields, $moduleId) { // $moduleId: 'iblock', 'sale', 'catalog' и т.д. if ($moduleId !== 'iblock') { return; // Обрабатываем только изображения каталога } $mimeType = $fileFields['type'] ?? ''; if (!str_starts_with($mimeType, 'image/')) { return; } $tmpFile = $fileFields['tmp_name']; applyWatermarkInPlace($tmpFile); }); 

Функция applyWatermarkInPlace модифицирует временный файл до его сохранения в /upload/. Это означает: в базе и на диске окажется уже обработанный файл, без необходимости хранить оригинал и кеш отдельно. — документация 1С-Битрикс по событиям.

Почему асинхронная обработка выгоднее?

При импорте каталога 5 000 товаров с 3 изображениями каждый — 15 000 операций GD. На среднем сервере обработка одного изображения занимает 50–150 мс. Итого: 12–37 минут добавляется ко времени импорта. Если это неприемлемо — переключаемся на асинхронную схему: сохраняем оригинал, ставим задачу в очередь b_agent, агент обрабатывает батчами по 100 изображений. Асинхронный подход в 3-5 раз уменьшает время импорта — проверено на проектах с каталогами до 100 000 товаров.

Параметр Синхронная обработка Асинхронная обработка
Скорость импорта Замедляется на минуты Без задержки
Использование CPU Пиковая нагрузка на шаге Равномерная нагрузка в фоне
Сложность реализации Простая Требует агента и планировщика
Хранение оригинала Не сохраняется Сохраняется до обработки

Как исключить лишние инфоблоки?

Не все изображения нужно маркировать. Логотип компании в шапке, иконки категорий, системные картинки — всё это проходит через CFile. Фильтрация по $moduleId решает только часть задачи. Для более точного управления добавляем проверку контекста через сессионную переменную:

AddEventHandler('main', 'OnBeforeFileAdd', function(&$fileFields, $moduleId) { if ($moduleId !== 'iblock') return; if (!isset($_SESSION['WATERMARK_ENABLED'])) return; $iblockId = $_SESSION['CURRENT_IBLOCK_ID'] ?? null; $noWatermarkIblocks = \Bitrix\Main\Config\Option::get('catalog', 'no_watermark_iblocks', ''); $excluded = array_map('intval', explode(',', $noWatermarkIblocks)); if ($iblockId && in_array($iblockId, $excluded)) return; applyWatermarkInPlace($fileFields['tmp_name']); }); 

Переменная CURRENT_IBLOCK_ID устанавливается в обработчике события OnBeforeIBlockElementAdd / OnBeforeIBlockElementUpdate. Список исключённых инфоблоков хранится в b_option.

Обработка ошибок: ни одного потерянного файла

Если GD-обработка завершится с ошибкой (битый файл, неподдерживаемый формат), загрузка не должна блокироваться. Обёртка applyWatermarkInPlace в блоке try/catch — при ошибке файл сохраняется без водяного знака, ошибка пишется в лог:

function applyWatermarkInPlace(string $tmpFile): void { try { // Обработка через GD $result = processWatermark($tmpFile); if ($result) { file_put_contents($tmpFile, $result); } } catch (\Throwable $e) { \Bitrix\Main\Diag\Debug::writeToFile( $e->getMessage(), 'watermark_error', '/bitrix/watermark.log' ); // Не прерываем загрузку — файл сохранится оригинальным } } 
Пример содержимого лога ошибок
2024-01-15 12:00:00 watermarK_erROR: GD library: Image type not supported 2024-01-15 12:00:01 watermarK_erROR: Could not open file /tmp/phpABC123 

Мы гарантируем, что ни одно изображение не будет потеряно. Лог ошибок поможет выявить проблемы с GD или форматами файлов.

Добавление водяных знаков для REST API и массового импорта

Событие OnBeforeFileAdd срабатывает при любом вызове CFile::SaveFile(), в том числе при работе REST API и CSV-импорта. Дополнительной настройки не требуется. Для больших объёмов данных мы рекомендуем асинхронный режим — агент будет обрабатывать изображения по расписанию.

Сравнение методов наложения водяных знаков

Метод Производительность Качество Сложность
GD Средняя (50-150 мс) Хорошее Низкая
Imagick Высокая (20-50 мс) Отличное Средняя
Внешний API Низкая (200-500 мс) Зависит от сервиса Высокая

Ограничения памяти и масштабирование

При обработке высокого разрешения (фото товаров 4000x3000px), GD может потребовать до 200-300 MB памяти на одно изображение. Для массового импорта обязательно увеличивайте memory_limit до 512 MB или используйте асинхронную обработку. Imagick позволяет работать с потоками и меньше нагружает память, но требует установки библиотеки на сервер. Наш опыт показывает: для каталогов свыше 50 000 товаров асинхронная схема с Imagick — оптимальный выбор. Мы протестировали оба подхода на боевых проектах и рекомендуем начинать с GD, масштабируясь до Imagick по мере роста.

Что входит в настройку

  • Реализация обработчика события OnBeforeFileAdd с фильтрацией по $moduleId
  • Список инфоблоков-исключений в b_option и настройка через административный интерфейс
  • Обработка ошибок GD без блокировки загрузки
  • Для массового импорта: асинхронная обработка через агент
  • Мониторинг лога /bitrix/watermark.log на предмет битых изображений
  • Документация по настройке и обучение администраторов (входит в стоимость)

Свяжитесь с нами для оценки вашего проекта. Получите консультацию по настройке защиты изображений — мы подберём баланс скорости и ресурсов.