Тэги

Блог Alex Delphine

Здесь я оставляю разные свои мысли.

 

Иногда требуется на некоторые изображения нанести логотип сайта (или ещё что то). Иногда на все изображения сайта. Каждую картинку редактировать очень долго (особенно если сайт большой, или изображения на сайт загружают разные пользователи). Да и не все компоненты могут добавлять Watermark.

В данном случае мне помог небольшой скрипт написанный на PHP.

Всё что требуется это загрузить скрипт, допустим, в папку watermark в корне сайта. И туда же положить файл логотипа. Затем в нужную папку с фотографиями или другими изображениями положить файл .htaccess. Можно ещё подкорректировать файл скрипта на предмет, на какие изображения накладывать Watermark. (т.е. задать минимальные размеры изображений, что бы Watermark  не добавлялся к аватарам, т.к. они обычно маленькие).

$info_o[0] > 250 - ширина изображения должна быть больше 250 px
$info_o[1] > 250 - высота изображения должна быть больше 250 px

Пример вставки водяного знака на изображение:

Watermark средствами PHP

Код самого скрипта:

Код PHP
<? 
 
waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "bottom=5,right=5"); 
 
function waterMark($original, $watermark, $placement = 'bottom=5,right=5', $destination = null) { 
   $original = urldecode($original);
   $info_o = @getImageSize($original); 
   if (!$info_o) 
         return false; 
   $info_w = @getImageSize($watermark); 
   if (!$info_w) 
         return false; 
 
   list ($vertical, $horizontal) = split(',', $placement,2); 
   list($vertical, $sy) = split('=', trim($vertical),2); 
   list($horizontal, $sx) = split('=', trim($horizontal),2); 
 
   switch (trim($vertical)) { 
      case 'bottom': 
         $y = $info_o[1] - $info_w[1] - (int)$sy; 
         break; 
      case 'middle': 
         $y = ceil($info_o[1]/2) - ceil($info_w[1]/2) + (int)$sy; 
         break; 
      default: 
         $y = (int)$sy; 
         break; 
      } 
 
   switch (trim($horizontal)) { 
      case 'right': 
         $x = $info_o[0] - $info_w[0] - (int)$sx; 
         break; 
      case 'center': 
         $x = ceil($info_o[0]/2) - ceil($info_w[0]/2) + (int)$sx; 
         break; 
      default: 
         $x = (int)$sx; 
         break; 
      } 
 
   header("Content-Type: ".$info_o['mime']); 
 
   $original = @imageCreateFromString(file_get_contents($original)); 
   $watermark = @imageCreateFromString(file_get_contents($watermark)); 
   $out = imageCreateTrueColor($info_o[0],$info_o[1]); 
 
   imageCopy($out, $original, 0, 0, 0, 0, $info_o[0], $info_o[1]); 
 
//Тут задаем размер изображения в которые можно добавлять Watermark
// $info_o[0] > 250 - ширина изображения должна быть больше 250 px
// $info_o[1] > 250 - высота изображения должна быть больше 250 px
 
   if( ($info_o[0] > 250) && ($info_o[1] > 250) )
   {
   imageCopy($out, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]);
   }
 
   switch ($info_o[2]) { 
      case 1: 
         imageGIF($out); 
         break; 
      case 2: 
         imageJPEG($out); 
         break; 
      case 3: 
         imagePNG($out); 
         break; 
         } 
 
   imageDestroy($out); 
   imageDestroy($original); 
   imageDestroy($watermark); 
 
   return true; 
   } 
 
?>

В принципе ничего сложного тут нет. Дерзайте :)

Скачать:
ФайлОписаниеРазмер файлаСкачено
Скачать этот файл (watermark.zip)watermark.zipСкрипт Watermark на PHP5 Kb2094


Комментарии  

 
0 #1 Madi 11.10.2010 23:40
долго искала
все работает
Спасибо большое:))
Цитировать
 
 
0 #2 Alex Delphine 12.10.2010 01:07
Цитирую Madi:
долго искала
все работает
Спасибо большое:))
Всегда пожалуйста.
Цитировать
 
 
+1 #3 Александр 06.11.2010 12:13
Аватары и изображения с ватермарком теряют качество.. :sad: Сильно сжатый jpeg получается... Как можно изменить значение сжатия?
Цитировать
 
 
+1 #4 Alex Delphine 08.11.2010 16:57
К сожалению я не знаю как изменить качество. Может кто из здешних обитателе подскажет.
Цитировать
 
 
0 #5 Алексей 03.02.2011 20:25
Установил, работает) прадва пришлось лишнюю покопаться с путями.. Посмотреть как установил можно на http://im42.ru
Цитировать
 
 
+1 #6 Дмитрий 09.02.2011 01:12
Замените это:
case 1:
imageGIF($out);
break;
case 2:
imageJPEG($out) ;
break;
case 3:
imagePNG($out);
break;
}

На это:
case 1:
imageGIF($out, NULL, 100);
break;
case 2:
imageJPEG($out, NULL, 100);
break;
case 3:
imagePNG($out, NULL, 100);
break;
}
И качество перестанет ухудшаться.
Цитировать
 
 
0 #7 Ник 27.02.2011 12:35
Ребят, что то я не понял, а где содержимое файла:.htaccess
"Затем в нужную папку с фотографиями или другими изображениями положить файл .htaccess."
Цитировать
 
 
0 #8 Alex Delphine 27.02.2011 23:53
Цитирую Ник:
Ребят, что то я не понял, а где содержимое файла:.htaccess
"Затем в нужную папку с фотографиями или другими изображениями положить файл .htaccess."
Скачай архив watermark.zip. Там есть нужный файл.
Цитировать
 
 
0 #9 Skif 13.03.2011 13:00
Даааа. А где образцы можно посмотреть как это работает ? И какую нагрузку на сайт этот скрипт создаёт ?
Цитировать
 
 
+2 #10 Klon 13.03.2011 13:05
У меня Неработает этот скрипт. Вместо картинок пустой квадрат.
Цитировать
 

Добавить комментарий

Правила! Запрещается ругаться матом, оскорблять других участников, спамить, давать рекламу.


Защитный код
Обновить