Watermark (водяные знаки) на изображении в WordPress

Август 14th, 2011 Рубрики: CMS, HOWTO, PHP, SEO, Web, Wordpress

водяные знаки на изображениях wordpressДоброго времени, читатели www.k-max.name! Сегодня опишу маленькое HOWTO, как на WordPress реализовать водяные знаки на изображениях с помощью php и apache (.htaccess). Самое интересное, что не понадобится нам никаких плагинов! При этом, данное решение вполне применимо к другим движкам. Итак, во первых, добавим в файл .htaccess следующие строки:

# enable watermark
RewriteRule ^(.*)wp-content/uploads/(.*(jpg|jpeg|gif|png))$ $1watermark.php?img=wp-content/uploads/$2

Согласно данного правила, все пути, начинающиеся  на wp-content/uploads/ и заканчивающиеся на jpg, jpeg, gif или png будут заменены строкой watermark.php?src=wp-content/uploads/...  Это позволяет оставлять неизменными исходные изображения и не применять обработчик для таких файлов, как архивы и др. Соответственно, заменив путь wp-content/uploads/на свой можно применить обработку изображений для другого движка.

Кроме этого, необходимо положить в корень сайта файл с именем watermark.png. Это файл самого водяного знака, который будет наложен на основное изображение. Так же, необходимо положить файл empty.png, который содержит 1 прозрачный пиксель и накладывается на маленькие изображения.

Далее, необходимо создать файл watermark.php со следующим содержимым и также положить его в корень сайта:

<?php
/*
* Блог любителя экспериментов
* http://www.k-max.name/
*/

// получаем переданный в GET параметр img
 $img= $_GET['img'];

// задаем  минимальное разрешение, для которого не нужен большой водяной знак
// и на основании размера применяем соответствующий png-файл
 $size = getimagesize($img);
 if ($size[0]<100 || $size[1]<100 ) {
     $watermark = imagecreatefrompng('empty.png');
 } else {
     $watermark = imagecreatefrompng('watermark.png');
 }
 $watermark_w = imagesx($watermark);
 $watermark_h = imagesy($watermark);

// обрабатываем gif
if(eregi('.gif',$img)) {

    $image = imagecreatefromgif($img);
    $size = getimagesize($img);
    $dest_x = $size[0] - $watermark_w - 0;
    $dest_y = $size[1] - $watermark_h - 0;
    imagealphablending($watermark, true);
    header('Content-type: mage/gif');
    imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_w, $watermark_h, 50);
    imagegif($image, "", 100);  

 }
// обрабатываем jpeg
elseif(eregi('.jpeg',$img)||eregi('.jpg',$img)) {

    $image = imagecreatefromjpeg($img);
    $size = getimagesize($img);
    $dest_x = $size[0] - $watermark_w - 0;
    $dest_y = $size[1] - $watermark_h - 0;
    imagealphablending($watermark, true);
    header('content-type: image/jpeg');
    imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_w, $watermark_h);
    imagejpeg($image,"", 100);

 }
// обрабатываем png
 elseif(eregi('.png',$img)) {

    $image = imagecreatefrompng($img);
    $size = getimagesize($img);
    $dest_x = $size[0] - $watermark_w - 0;
    $dest_y = $size[1] - $watermark_h - 0;
    imagesavealpha($image, true);
    imagealphablending($watermark, true);
    header('Content-type: image/png');
    imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_w, $watermark_h);
    imagepng($image);
 }
 else {
 exit("Изображение не имеет формат jpg, gif или png.");
 }
// освобождаем память
 imagedestroy($image);
 imagedestroy($watermark); 

 ?>

Готовый архив можно скачать ниже и распаковать себе в корневой каталог блога. В архиве отсутствует файл .htaccess, чтобы вы не заменили свои настройки wordpress, поэтому не забудьте добавить вышеуказанную строку.

Известные баги:

 

  • на изображениях gif - не сохраняется прозрачность водяного знака :(
  • на png с 8-bit политрой так же не сохраняется прозрачность водяного знака

Буду благодарен за решение данной проблемы.

Скачать watermark для изображений WordPress.

С Уважением, Mc.Sim!


Буду рад Вашим благодарностям на:
Яндекс деньги:   41001320540884
WebMoney.WMZ: Z400409137923
WebMoney.WMR: R726484058259
 


Теги: , , , , ,

Есть 6 коммент. к “Watermark (водяные знаки) на изображении в WordPress”

  1. djduff
    Октябрь 19th, 2011 at 22:11
    1

    Даже на маленькие картинки все равно накладывает водяной знак.. на png

    • Октябрь 20th, 2011 at 10:26
      2

      Доброго времени.
      А что у вас в этиз строчках указано?
      $size = getimagesize($img);
      if ($size[0]<100 || $size[1]<100 ) {
      $watermark = imagecreatefrompng('empty.png');
      } else {
      $watermark = imagecreatefrompng('watermark.png');
      }

  2. Евгений
    Февраль 7th, 2012 at 21:41
    3

    Работает. А почему не предусмотрено наложение водяного знака на bmp файлы?

    • Февраль 7th, 2012 at 21:46
      4

      честно говоря, пока еще не встречал кого-то, кто в Веб размещает bmp-формат. :)

    • Февраль 7th, 2012 at 21:47
      5

      Если все же есть необходимость, могу попробовать допилить статью.

  3. nikkkkz
    Февраль 12th, 2012 at 12:30
    6

    Суть понял, но все равно, заразка не кидает вотермарк((
    Хотя у меня не cms-ка стоит, а тупо хтмл)
    буду разбираться, хотя пути к фоткам указал правильно
    кенкс)

Написать комментарий