ResizeImageGet і простий водяний знак нальоту
ResizeImageGet і простий водяний знак нальоту
Сьогодні поговоримо про те, як найпростіше встромити водяний знак на картинки в Бітрікс. Наприклад, на всі зображення каталогу. Повної автоматики отримати не вдалося, хоча є зачіпки, але про це нижче.
Отже, за основу я взяв метод ResizeImageGet. Чому? Тому що саме він робить копію картинки, а не впливає на оригінал. І саме він у собі звертається до методу CFile::ResizeImageFile, який вже може накласти водяний знак.
Для початку створюємо клас із одним статичним методом:
Параметр fill може дорівнювати resize, тоді розмір ватемарка розраховується на підставі значення coefficient
інакше значення може бути repeat, тоді розмір не змінюється і виконується заповнення всього зображення ватемарком
Власне, це і буде ваш клас для застосування утермарку. У ньому вказані параметри, якими можна крутити для знака.
Потім йдемо в /bitrix/modules/main/classes/general/file.php та знаходимо там метод ResizeImageGet. Копіюємо його як є і вставляємо у ваш метод. Я навмисно не прикладаю тут готових файлів, тому що даний метод може часто змінюватися, і через пару версій вже бути зовсім іншим.
Вставили метод, тепер працюємо з ВАШИМ класом, у ядрі нічого не міняємо. Відразу скажу, що ви можете міняти його як завгодно, які завгодно параметри додавати, але я йшов шляхом мінімального втручання.

Потім знаходимо блок коду безпосередньо перед ресайзом копії.

І туди зверху вставляємо дані кілька рядків:
А де другим прямокутником зазначено, ми замінюємо array() на новий масив. Це і є застосування утермарку і все танці з бубном для нього. І ось тепер проавтоматики. Якщо ви подивитеся в коді ще вище, побачите там обробку події OnBeforeResizeImage. І ось його можна навчити приймати змінні за посиланням, і доповнити його передачею параметра утермарку. Тоді все це можна було б змінювати в обробнику. Дуже маленька дрібниця, і я сподіваюся її Бітрікс зробить рано чи пізно.
По суті все тепер як застосовувати. Ну по-перше, якщо у вас вже використовується ResizeImageGet, ви можете просто замінити в код виклик CFile::ResizeImageGet на CFileWater::ResizeImageGet і все буде працювати.
Тепер про те, чому я налаштування знака виніс окрему змінну. А щоб для різних варіантів підкидати різні водяні знаки. Наприклад: