Есть несколько способов добавить водяной знак в Битрикс. Рассмотрим два способа:
Добавляем в /bitrix/php_interface/init.php события на создание и изменение элемента и подключаем файл с функциями которые и будут делать всю работу.
1 2 3 |
require_once ($_SERVER['DOCUMENT_ROOT']."/bitrix/php_interface/watermark.php"); AddEventHandler("iblock", "OnBeforeIBlockElementAdd",array("CWatermark", "ImageAdd")); AddEventHandler("iblock", "OnBeforeIBlockElementUpdate",array("CWatermark", "ImageUpdate")); |
Создаем файл watermark.php и кладем его в /bitrix/php_interface/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
<?php class CWatermark { //Срабатываем при создании элемента function ImageAdd(&$arFields){ //Указываем нужные ИБ, допустим ваш каталог имеет ID 2 if ($arFields["IBLOCK_ID"] == 2){ if (!empty($arFields["PREVIEW_PICTURE"]["tmp_name"])){ CWatermark::PostWaterMark(&$arFields["PREVIEW_PICTURE"]["tmp_name"]); } //Если заполнено детальное изображение if (!empty($arFields["DETAIL_PICTURE"]["tmp_name"])){ CWatermark::PostWaterMark(&$arFields["DETAIL_PICTURE"]["tmp_name"]); } //Тут наносим на дополнительное фото, 11 это ID свойства ИБ foreach ($arFields["PROPERTY_VALUES"]["11"] as $key=>$moreimg) { CWatermark::PostWaterMark(&$arFields["PROPERTY_VALUES"]["11"][$key]['VALUE']['tmp_name']); } } } //Срабатываем при изменение элемента function ImageUpdate(&$arFields){ //То же самое, указываем ID ИБ if ($arFields["IBLOCK_ID"] == 2){ //Если заполнено изображение анонса if (!empty($arFields["PREVIEW_PICTURE"]["tmp_name"])){ CWatermark::PostWaterMark(&$arFields["PREVIEW_PICTURE"]["tmp_name"]); } //Если заполнено детальное изображение if (!empty($arFields["DETAIL_PICTURE"]["tmp_name"])){ CWatermark::PostWaterMark(&$arFields["DETAIL_PICTURE"]["tmp_name"]); } //Тут наносим на дополнительное фото, 11 это ID свойства ИБ foreach ($arFields["PROPERTY_VALUES"]["11"] as $key=>$moreimg) { CWatermark::PostWaterMark(&$arFields["PROPERTY_VALUES"]["11"][$key]['VALUE']['tmp_name']); } } } function PostWaterMark(&$_image){ //Получаем папку для загрузок $_upload_dir = COption::GetOptionString("main","upload_dir"); //Открываем картинку для наложения $wmTarget = $_SERVER['DOCUMENT_ROOT'] ."/bitrix/php_interface/watermark.png"; $resultImage = imagecreatefromjpeg($_image); imagealphablending($resultImage, true); //Создаем временную картинку $_image = $_SERVER['DOCUMENT_ROOT'] . "/" . $_upload_dir. "/tmp/".md5(microtime()).".jpg"; //Загружаем PNG ватермарка $finalWaterMarkImage = imagecreatefrompng($wmTarget); //Узнаем размеры картинки водяного знака $finalWaterMarkWidth = imagesx($finalWaterMarkImage); $finalWaterMarkHeight = imagesy($finalWaterMarkImage); //Узнаем размеры загружаемой картинки $imagesizeW = imagesx($resultImage); $imagesizeH = imagesy($resultImage); //Водяной знак добавляем по центру imagecopy($resultImage, $finalWaterMarkImage, $imagesizeW/2 - $finalWaterMarkWidth/2, $imagesizeH/2 - $finalWaterMarkHeight/2, 0, 0, $finalWaterMarkWidth, $finalWaterMarkHeight); imagealphablending($resultImage, false); imagesavealpha($resultImage, true); imagejpeg($resultImage, $_image, 100); imagedestroy($resultImage); imagedestroy($finalWaterMarkImage); } //Очищаем временную папку function Clear(){ $_upload_dir = COption::GetOptionString("main", "upload_dir"); $_WFILE = glob($_SERVER['DOCUMENT_ROOT'] . "/" . $_upload_dir . "/tmp/*.jpg"); foreach($_WFILE as $_file) unlink($_file); return true; } } ?> |
Не забудьте положить картинку водяного знака в /bitrix/php_interface/watermark.png и создать, если ее нет, папку tmp с правами 777 в папке upload
Второй способ (создание водяного знака «на лету»):
В result_modifier.php шаблона необходимого вам компонента изменяете $arResult. Например для catalog.element
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$arResult['DETAIL_PICTURE_RESIZED'] = array(); if (!empty($arResult['DETAIL_PICTURE)) { $arFilter_watermark = Array( Array( 'name' => 'watermark', 'position' => 'br', 'size'=>'real', 'type'=>'image', 'alpha_level'=>'10', 'file'=>$_SERVER['DOCUMENT_ROOT'].'/img/watermark.png', ), ); $arResult['DETAIL_PICTURE_RESIZED'] = CFIle::ResizeImageGet( $arResult['DETAIL_PICTURE'], array('width'=>800, 'height'=>600), BX_RESIZE_IMAGE_EXACT, true, $arFilter_watermark ); } В шаблоне компонента: <?php if (!empty($arResult['DETAIL_PICTURE_RESIZED']): ?> <img src="<?=$arResult['DETAIL_PICTURE_RESIZED']['src']?>" width="<?=$arResult['DETAIL_PICTURE_RESIZED']['width']?>" height="<?=$arResult['DETAIL_PICTURE_RESIZED']['height']?> /> <?php endif; ?> |
В корне сайта должна быть создана папка /img/ с файлом watermark.png