Допустим мы хотим, чтобы при добавлении товара на все картинки (анонс, детальное изображение и дополнительные фотографии) накладывался водяной знак фирмы.
Заходим в /bitrix/php_interface/init.php, добавляем туда события на создание и изменение элемента и подключаем файл с функциями которые и будут делать всю работу.
Создаем файл watermark.php и кладем его в /bitrix/php_interface/
Файл watermark.php содержит следующее:
Не забудьте положить картинку водяного знака в /bitrix/php_interface/watermark.png
Заходим в /bitrix/php_interface/init.php, добавляем туда события на создание и изменение элемента и подключаем файл с функциями которые и будут делать всю работу.
<?php //Подключаем файл с функциями require_once ($_SERVER['DOCUMENT_ROOT']."/bitrix/php_interface/watermark.php"); //Создание элемента AddEventHandler("iblock", "OnBeforeIBlockElementAdd",array("MyWatermark", "ImageAdd")); //Изменение элемента AddEventHandler("iblock", "OnBeforeIBlockElementUpdate",array("MyWatermark", "ImageUpdate")); ?> |
Файл watermark.php содержит следующее:
<?php class CWatermark{ //Срабатываем при создании элемента function ImageAdd(&$arFields){ //Указываем нужные ИБ, допустим ваш каталог имеет ID 14 if ($arFields["IBLOCK_ID"] == 14){ if (!empty($arFields["PREVIEW_PICTURE"]["tmp_name"]){ MyWatermark::PostWaterMark(&$arFields["PREVIEW_PICTURE"]["tmp_name"]); } //Если заполнено детальное изображение if (!empty($arFields["DETAIL_PICTURE"]["tmp_name"]){ MyWatermark::PostWaterMark(&$arFields["DETAIL_PICTURE"]["tmp_name"]); } //Тут наносим на дополнительное фото, 78 это ID свойства ИБ foreach ($arFields["PROPERTY_VALUES"]["78"] as $key=>$moreimg) { MyWatermark::PostWaterMark(&$arFields["PROPERTY_VALUES"]["78"][$key]['VALUE']['tmp_name']); } } } //Срабатываем при изменение элемента function ImageUpdate(&$arFields){ //То же самое, указываем ID ИБ if ($arFields["IBLOCK_ID"] == 14){ //Если заполнено изображение анонса if (!empty($arFields["PREVIEW_PICTURE"]["tmp_name"]){ MyWatermark::PostWaterMark(&$arFields["PREVIEW_PICTURE"]["tmp_name"]); } //Если заполнено детальное изображение if (!empty($arFields["DETAIL_PICTURE"]["tmp_name"]){ MyWatermark::PostWaterMark(&$arFields["DETAIL_PICTURE"]["tmp_name"]); } //Тут наносим на дополнительное фото, 78 это ID свойства ИБ foreach ($arFields["PROPERTY_VALUES"]["78"] as $key=>$moreimg) { MyWatermark::PostWaterMark(&$arFields["PROPERTY_VALUES"]["78"][$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 - $finalWaterMarkWidth, $imagesizeH - $finalWaterMarkHeight, 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; } } ?> |