Автоматичне налаштування водяних знаків у 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
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1165

Налаштування автоматичного накладання водяних знаків 1С-Бітрікс

Уявіть: ви імпортуєте 10 000 товарів через CSV, кожен з 3 зображеннями. Разом 30 000 картинок. Без автоматизації довелося б вручну накладати водяний знак на кожну — процес на тиждень. Менеджери забувають, версії з водяним знаком плутаються, зайві копії забивають диск. Потрібне перехоплення на рівні події завантаження файлу. Ми, як сертифіковані Bitrix-розробники з 10+ років досвіду, реалізували вже 40+ проектів із захисту зображень. Пропонуємо налаштувати автоматичне накладання під ключ. Зв'яжіться з нами — оцінимо ваш проект і запропонуємо оптимальне рішення.

Як працює обробник 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' ); // Не перериваємо завантаження — файл збережеться оригінальним } } 
Приклад вмісту логу помилок
watermarK_erROR: GD library: Image type not supported 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 на предмет битих зображень
  • Документація з налаштування та навчання адміністраторів (входить у вартість)

Зв'яжіться з нами для оцінки вашого проекту. Отримайте консультацію з налаштування захисту зображень — ми підберемо баланс швидкості та ресурсів.