21 комментарий

avatar
Может быть я не правельно выразился.

Наложение вашего логотипа на все загружаемые пользователями изображения.
avatar
да правильно ты правильно выразился… видимо никто не делал еще просто
на самом деле я не думаю что это сложно, при ресайзе же вроде бы используется таже библиотека, что может накладывать вотермарку… поэтому можно расковырять какой нибудь готовый модуль и подогнать под LS
avatar
Моя простая реализация

1) Создаем папку в корне — water, в ней создаем файл nick.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) { 
   $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]); 
   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.png

2) Ну и последний шаг, это создать файл .htaccess в папке uploads/images/ с содержанием:
<FilesMatch "\.(gif|jpg|png)$"> 
   RewriteEngine On 
   RewriteCond %{REQUEST_FILENAME} -f 
   RewriteRule ^(.*)$ /water/nick.php [T=application/x-httpd-php,L,QSA] 
</FilesMatch>
  • Nick
  • +3
avatar
Это хорошо, реврайтим на лету. Проблема только в том что реврайтятся все изображения — аватары пользователей, аватары сообществ итд.

При большом количестве картинок и трафе 4к в мес не создаст ли это нагрузки на сервер?
avatar
4к в день конечно же.
avatar
Да, еще вопрос, насколько я понял, вот эта команда позволяет сохранять оригинальный файл
@copy($original, $original . '.orig');

делая копию в *.jpg.orig (допустим)
Я ее убрал… лишним нагружает сервер.

И еще, получается — скрипт работает постоянно на одну и туже страницу (на одно и то же изображение), т.е. при обновлении страницы, снова проходит команда наложения водяного знака? И когда нашимаешь «обновить страницу» сервер нагружается, чтобы снова клеить "_watermark.png"?
  • Yuta
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.