Блог did5.ru

Про АйТи и около айтишные темы

Борьба с воровством контента или водяные знаки (watermark) на все изображения в блоге WordPress

6 комментариев

wordpress thumb Борьба с воровством контента или водяные знаки (watermark) на все изображения в блоге WordPressНекоторое время назад, когда я разбирался с упавшим блогом (проблема хостинга была), я просматривал логи веб-сервера и заметил, что некоторые запросы идут не к WordPress, а напрямую к картинкам. Открыл страницу источника запроса, а там полностью скопирована одна из моих заметок и картинки подгружаются с моего хостинга. Вообще обнаглели!

Один способов борьбы с таким тупым копированием – это водяные знаки (watermarks) на изображениях в заметках. Попробовал добавлять их вручную, никакого удовольствия и увеличивает время на написание заметок. Нужно было автоматизированное решение. Нагуглил отличный скрипт на PHP, которой автоматически добавляет watermark всем картинкам. Вариант очень понравился, поэтому решил его внедрить…

На тестовом блоге добавил этот скрипт в корень WordPress, создал простенький watermark.png, открыл тестовый блог – все отлично, на всех изображениях появился мой водяной знак. А главный плюс, что оригиналы изображений остаются без изменений, их можно потом использовать на других своих сайтах/блогах.

После удачного тестирования начал переносить скрипт на хостинг. Создал новый watermark.png для основного блога, закачал на хостинг. Вроде все, должно работать. Обновил главную страницу блога, но все картинки остались без изменений, водяной знак не добавился к картинкам. Странная ситуация, на локальной версии блога работает, а на хостинге нет. Видимо проблема связана с хостингом.

Тех.поддержка хостинга провайдера меня отправила на тематические форумы с этим вопросом. Но гугл не подвел. Проблема заключалась в том, что скрипт PHP прописывается в файле .htaccess веб-сервера Apache. Локальный блог запущен в Denwer, который использует просто Apache, а на хостинге используется более сложная схема nginx + apache, где за отдачу картинок отвечает nginx. Поэтому watermark не добавлялся.

Как реализовать этот способ на nginx + apache я не нашел и это стало одним из последних причин перехода на новый хостинг.

И так, про свои мучения рассказал – переходим к самому скрипту

.htaccess

Нужно добавить правило в файл .htaccess, который находится в корне WordPress. Добавляем следующие строки:

# 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/), то можно приспособить скрипт для другого CMS.

Watermark.png

Создаем два файла PNG. Первый – это watermark.png с картинкой водяного знака, которая будет накладываться на изображения. Второй файл – это empty.png, который содержит один прозрачный пиксель. empty.png будет накладываться на изображения маленького размера.

Watermark.php

Файл Watermark.php тоже копируем в корень сайта

<?php
/*
* http://did5.ru
*/

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

// задаем  минимальное разрешение, для которого не нужен большой водяной знак
// и на основании размера применяем соответствующий png-файл
// size[0] - ширина, size[1] - высота изображения
 $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); 
 ?>

Заключение

Вот такой нехитрый способ для добавления водяных знаков на изображения в WordPress. Пример работы скрипта в любой заметке с картинками в моем блоге. И для этого не понадобилось устанавливать никаких плагинов. Надеюсь, что это хоть как-то поможет от копирования контента с блога без разрешения автора и без ссылки на оригинал.

Вопрос

А как Вы боретесь с проблемой воровства контента?

Нашли опечатку в тексте? Пожалуйста, выделите ее и нажмите Ctrl+Enter! Спасибо!


Хотите поблагодарить автора за эту заметку? Вы можете это сделать!


Автор: did5

30 мая 2012 в 15:53

Рубрика: Блог

Метки:

6 комментариев на «Борьба с воровством контента или водяные знаки (watermark) на все изображения в блоге WordPress»

Вы можете подписаться на RSS-ленту комментариев или оставить трекбек для публикации «Борьба с воровством контента или водяные знаки (watermark) на все изображения в блоге WordPress».

  1. Решение оригинальное. Когда у меня была такая проблема, я решил ее иначе — сделал фильтр, который накладывает WM на автомате при загрузке фоток. Т.е. только 1 раз. Ваш же вариант работает при каждом обращении к фото — это лишняя нагрузка на сервер. Но решение хорошее )

    Александр

    30 мая 2012 в 20:24

  2. Александр, т.е. фильтр добавляет WM в момент загрузки картинок на хостинг и они там уже лежат с WM?

    did5

    31 мая 2012 в 10:36

  3. Ну да, именно так.

    Александр

    01 Июн 2012 в 11:11

  4. Есть мнение, что поисковики видят откуда картинки изначально, и без подписи и знака...

    Дмитрий

    01 Июн 2012 в 14:57

  5. Дмитрий, а теперь это видят и читатели =)))

    did5

    03 Июн 2012 в 23:12

  6. помогите мне подключить этот скрипт . У меня не работает почему не пойму ......

    Константин

    04 Июл 2014 в 17:34

Ваш отзыв