ResizeImageGet і простий водяний знак нальоту

ResizeImageGet і простий водяний знак нальоту

Сьогодні поговоримо про те, як найпростіше встромити водяний знак на картинки в Бітрікс. Наприклад, на всі зображення каталогу. Повної автоматики отримати не вдалося, хоча є зачіпки, але про це нижче.

Отже, за основу я взяв метод ResizeImageGet. Чому? Тому що саме він робить копію картинки, а не впливає на оригінал. І саме він у собі звертається до методу CFile::ResizeImageFile, який вже може накласти водяний знак.

Для початку створюємо клас із одним статичним методом:

Параметр fill може дорівнювати resize, тоді розмір ватемарка розраховується на підставі значення coefficient

інакше значення може бути repeat, тоді розмір не змінюється і виконується заповнення всього зображення ватемарком

Власне, це і буде ваш клас для застосування утермарку. У ньому вказані параметри, якими можна крутити для знака.

Потім йдемо в /bitrix/modules/main/classes/general/file.php та знаходимо там метод ResizeImageGet. Копіюємо його як є і вставляємо у ваш метод. Я навмисно не прикладаю тут готових файлів, тому що даний метод може часто змінюватися, і через пару версій вже бути зовсім іншим.

Вставили метод, тепер працюємо з ВАШИМ класом, у ядрі нічого не міняємо. Відразу скажу, що ви можете міняти його як завгодно, які завгодно параметри додавати, але я йшов шляхом мінімального втручання.

простий

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

знак

І туди зверху вставляємо дані кілька рядків:

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

По суті все тепер як застосовувати. Ну по-перше, якщо у вас вже використовується ResizeImageGet, ви можете просто замінити в код виклик CFile::ResizeImageGet на CFileWater::ResizeImageGet і все буде працювати.

Тепер про те, чому я налаштування знака виніс окрему змінну. А щоб для різних варіантів підкидати різні водяні знаки. Наприклад: