студия открытых решений о-никс
<< Apache MPM 504 Gateway Time-out >>

Watermark (водяной знак) средствами PHP

Создание водяного знака, известного как "защитная подпись", "цифровая подпись" или watermark, на изображении на лету. Хостинг на веб-сервере Apache с поддержкой PHP.

Создаём файл _wm.php со следующим содержанием:

<?
waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "bottom=5,right=5");
//waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "middle=0,center=0");  
 
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]); 
   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; 
   } 
?>

Загружаем файл на хостинг в корень сайта, или в любое другое место, например, в каталог /wm/, расположенный в корне сайта. Т.е. путь к нашему файлу будет такой: /wm/_wm.php

Рядом с этим файлом кладём нашу подпись - прозрачный рисунок в формате gif, png (8-ми или 24-х бит) с подписью, которая будет накладываться на изображение. Файлик изображения назовём, к примеру, watermark.png

Создаём файл .htaccess следующего содержания:

DirectoryIndex index.php 
<FilesMatch "\.(gif|jpg|JPG|png)$"> 
   RewriteEngine On 
   RewriteCond %{REQUEST_FILENAME} -f 
   RewriteRule ^(.*)$ /wm/_wm.php [T=application/x-httpd-php,L,QSA] 
</FilesMatch>

И чтобы все заработало, остался последний шаг: загружаем файлик .htaccess в каталог, содержащий рисунки, на которые мы хотим наложить цифровую подпись. Если защитную подпись хотим накладывать на все существующие изображения на сайте, то размещаем файл .htaccess в корне каталога (или дописываем эти строки в существующий файл). Ватермарк будет накладываться на все изображения, находящиеся в текущем каталоге и всех его подкаталогах. Меняя такие параметры скрипта, как "bottom", "right" или "middle" и "center", можно размещать подпись в любом месте изображения. "Водяная подпись" накладывается на изображения, размер которых превышает по ширине и высоте 250 пикселей. Это условие можно изменить в скрипте.

Достоинство метода - простота реализации.

Недостатки - создаётся дополнительная нагрузка на сервер при сведении изображений, загружаемых в окно браузера посетителя сайта.

<< Apache MPM 504 Gateway Time-out >>

Поделиться в соцсетях:

система комментирования CACKLE
RSS