Найти тему
bitrix.dev

Как добавить watermark для изображений в Bitrix?

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

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

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

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

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

Все параметры:

$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" // ( использовать ли знак копирайта перед текстом )
)
);