Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Ватермарк на все фото на сайте

00 голосов
4
Здравствуйте , по ходу работы у меня возникла проблема с ватермарком  на все фото на сайте ...
для фото с модуля инфо блоков проблем нет , функция CFile::ResizeImageGet() решает ее...
но как сделать что бы при загрузке картинки в медиагалерею наложивался ватермарк ?

пробую делать такой скрипт


Код
<?     $arFilters = Array(
            array("name" => "watermark",
               "position" => "right",
               "coefficient"    => "7",
               "type" => "text",
               "text"  => "watermark",
               "color"=>"000000", 
               "font" => $_SERVER["DOCUMENT_ROOT"]."/font.ttf")
              );
    CModule::IncludeModule("fileman");
    CMedialib::Init();
    $n = microtime(1);
    /* Получаем список всех коллекций в медиабиблиотеке*/
    $ar = CMedialibCollection::GetList(array('arFilter' => array('ACTIVE' => 'Y')));

   $ID_ARRAY = array();
    foreach($ar as $key=>$val) {
     $ID_ARRAY[] = $val['ID'];
    }
    /* Получаем по всем галереям списки фотографий */
    $ar_item = CMedialibItem::GetList(array('arCollections'=>$ID_ARRAY));


  foreach($ar_item as $key=>$val) {
    
          
           //print_r($pic);
          $h=$val['HEIGHT']-1;
          $w=$val['WIDTH']-1;
            $arFileTmp_p = CFile::ResizeImageGet(
                         $ar_item[$key],
                         array("width" => $h, 'height' => $w),
                         BX_RESIZE_IMAGE_PROPORTIONAL,
                         false,
                         $arFilters
                         );
               

 $arSize = getimagesize($_SERVER["DOCUMENT_ROOT"].$arFileTmp_p["src"]);

                $ar_item[$key]["PIC"]  = array(
                      'SRC' => $arFileTmp_p["src"],
                      'WIDTH' => IntVal($arSize[0]),
                      'HEIGHT' => IntVal($arSize[1]),
                    );
     clearstatcache();
    $uploaddir ="/upload/".$val["SUBDIR"]."/"; 
    //echo $uploaddir."<br>" ;
    $uploadfile = $ar_item[$key]["PATH"]; 
    $uploadfile_temp = $ar_item[$key]["PIC"]["SRC"]; 

    //echo $uploadfile."<br>" ;

if(is_file($uploadfile)){//проверяем есть ли такой файл
  if(@unlink($uploadfile)){//удаляем если есть
    if (@move_uploaded_file($uploadfile_temp, $uploadfile)) { 
      chmod($uploadfile,0777);//устанавливаем права
      print "Файл обновлен!"; 
   }else{ 
        print "Ошибка при копировании!"; 
      }   
  }else{//если файл заблокирован
    print "Невозможно удалить файл!"; 
     }

}else{//сли нет то пишем
  if (@move_uploaded_file($uploadfile_temp, $uploadfile)) { 
   chmod($uploadfile,0777);//устанавливаем права
   print "Файл записан!"; 
   }else{ 
   print "Ошибка при копировании!"; 
  }  
} 

}

    $f = microtime(1) - $n;

?>


но не хочет перезаписывать  $ar_item[$key]["PIC"]["SRC"]; на $ar_item[$key]["PATH"]; ((( и не практично так как после нескольких запусков скрипта ватермарк наложится несколько раз и будет не красиво...

может кто то уже сталкивался с тем что на все фотографии сайта нужно налаживать ватермарк ? не важно это элемент  инфоблока или медиа галереи ...

подскажите пожалуйста ...
Заранее спасибо
спросил 16 Янв, 14 от Ris (280 баллов)

4 Ответы

00 голосов
Хм неужели не кому не пришлось с этим  сталкиваться ?((
ответил 03 Май, 14 от Ris (280 баллов)
00 голосов
Создайте агента который будет добавлять watermark, Для определения того наложен ли лого или нет можете в БД создать доп. таблицу где будет храниться ID объекта и путь к файлу. Если путь к файлу в этой таблице будет отличаться от файла в библиотеке то можете накладывать лого.
ответил 28 Авг, 14 от Run (1,300 баллов)
00 голосов
Проще накладывать Watermark при выводе картинки.
ответил 03 Янв, 15 от Reihent (580 баллов)
00 голосов
Цитата
Денис Диденко пишет:
Проще накладывать Watermark при выводе картинки.
думаю идея лучше ... не хочется делать запросы в базу , но CFile::ResizeImageGet не хочет заменять исходное фото ( потому и хотел сделать скрипт замены (  было бы очень хорошо если бы  CFile::ResizeImageGet  возращала бы измененное фото в исходящуюю папку (
ответил 22 Апр, 15 от Ris (280 баллов)

Похожие вопросы

0 голосов
0 ответов
спросил 08 Дек, 13 от Ris (280 баллов)
0 голосов
0 ответов
0 голосов
0 ответов
спросил 10 Авг, 20 от аноним
+1 голос
1 ответ
0 голосов
1 ответ