как добавить вотермарку в битриксе

Как в Битриксе добавить водяной знак на изображения

При помощи стандартного метода API, можно добавлять к новым изображениям вотермарку. Как именно это сделать и какие могут возникнуть сложности читайте далее.

Ставим для дополнительных фото watermark в Битрикс

Для чего нужна защита изображений? В первую очередь от копирования сторонними сайтами, парсерами. Стандартно, вы можете настроить через админку только для изображения анонса и детального изображения. Там есть не только установка изображения, но и наложения текста. Параметров и вариантов много. Рассмотрим пример с изображением.

foreach ($arResult['MORE_PHOTO'] as $key => $arFile) {
   $arResizeFile = CFile::ResizeImageGet(
      $arFile["ID"],
      array("width" => 80, 'height' => 80),
      BX_RESIZE_IMAGE_PROPORTIONAL,
      true,
      $arWaterMark
   );

   $arResult['MORE_PHOTO'][$key] = $arResizeFile;
}

CFile::ResizeImageGet – вызывается тогда, когда вы хотите оптимизировать размер фото и вывести миниатюры. Также, он позволяет наложить водяной знак на это новое фото.

Для справки, как работает данный метод – функция смотрит, существует ли файл по заданным параметрам у вас на сервере, если он уже есть, то загружает его. А если нет – создает такой файл. В том числе, с указанной watermark. При первом запуске данной функции, можно заметить провисание в скорости загрузки, но переживать не стоит, в дальнейшем процедура поиска файла будет занимать гораздо меньше времени (особенно это заметно на большом количестве фото).

Внимательный читатель заметил, а где же $arWaterMark? Вот она:

$arWaterMark = [
	'name' => 'watermark',
	'position' => 'bc', // bottom center
	'type' => 'file',
	'size' => 'small',
	'alpha_level' => 80,
	'file' => $_SERVER['DOCUMENT_ROOT'].'/images/watermark.png',
];

Параметры:

$arFilters = array(
      array(
            "name"           => "watermark", 
            "position"       => "bc",        // (доступные варианты tl|tc|tr|ml|mc|mr|bl|bc|br или topleft|topcenter|topright|centerleft|center|centerright|bottomleft|bottomcenter|bottomright)  
            "type"           => "image",     // (доступные варианты "image|text")
            "size"           => "real",      // ( доступные варианты big|medium|small|real; real доступен только для type=image )
            "coefficient"    => "1",         // ( альтернатива параметру size. В случае текстового варианта - от 1 до 7, по крайней мере так в исходниках; для картинок 0.1 до 1 )
            "fill"           => "exact",          // ( доступные варианты exact|resize|repeat )
            "file"           => $_SERVER["DOCUMENT_ROOT"]."/watermark.png",  // (абсолютный путь до картинки с водяным знаком)
            "text"           => "Водяной знак!", //  ( текст водяного знака )
            "color"          => "ff0000",        //  ( hex формат цвета текста )
            "font"           => $_SERVER["DOCUMENT_ROOT"]."/arial.ttf",      //  ( путь до файла шрифта в формате .ttf )
            "use_copyright"  => "Y"              //  ( использовать ли знак копирайта перед текстом )
     )
   );

Для разработчиков, которые решают подобную задачу для всех новых элементов инфоблока, стоит вопрос какие события можно использовать. OnBeforeIBlockElementAdd и OnBeforeIBlockElementUpdate, только тут советую смотреть уже в сторону CIBLock::FilterPicture.

Если на вашем сайте необходимо доработать добавление логотипа на фотографиях, пишите мне на почту или в комментарии

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *