При помощи стандартного метода 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.