Вы сильно рискуете, когда публикуете свои изображения и видео в интернете, так как Ваши материалы с легкостью могут быть скопированы на сотни других ресурсов. Не очень здорово будет обнаружить Вашу картинку к новости, например, над которой Вы усиленно трудились, на другом сайте без указания источника, то есть Вашего сайта, не правда ли? Вы, мягко говоря, расстроитесь, а если это была не простая картинка к новости, а сложная работа в фотошопе, сказать, что Вы будите в гневе – ничего не сказать! Так, что же можно предпринять, чтобы защитить свои графические материалы?

Для защиты авторских прав на изображения или видео в интернете используется, как правило, цифровой водяной знак или ЦВЗ для удобства. Прикрепляйте ЦВЗ на каждое загружаемое изображение, для того, чтобы обезопасить его. ЦВЗ может быть логотипом Вашего сайта или компании, красиво и эстетично размещенный на загружаемых изображениях.

Создадим, вначале, файл содержащий необходимые настройки в виде констант – /config.php :

Define("WATERMARK_OVERLAY_IMAGE", "/develop/images/watermark.png"); // Путь до Вашего ЦВЗ define("WATERMARK_OUTPUT_QUALITY", 100); // Качество получаемого изображения с ЦВЗ. Помните, что качество напрямую влияет на размер файла. define("UPLOADED_IMAGE_DESTINATION", "/develop/folder1/"); // Путь к расположению исходных загружаемых изображений define("WATERMARK_IMAGE_DESTINATION", "/develop/folder2/"); // Путь к изображениям с наложенным ЦВЗ

Соберем созданные выше файлы в исполняющем загрузку файле /upload.php

Include ("config.php"); include ("functions.php"); $result = ImageUpload($_FILES["userfile"]["tmp_name"], $_FILES["userfile"]["name"]); if ($result === false){ echo "Загрузка не удалась!"; }

Для примера если загружаемое изображение было:

То после загрузки и наложения водяного знака, получиться следующее изображение:

В данном примере загружаемое изображение сохраняется в одну папку, а изображение, на которое был наложен цифровой водяной знак в другую, чтобы Вы всегда имели доступ к оригинальным изображениям, но на сайте, разумеется, стоит размещать изображения с ЦВЗ.

(178,4 KiB, 989 hits)

Если вы хотите добавить водяной знак на фото, не заморачиваясь с графическими редакторами или добавлять его во время загрузки фоток на сервер, то это урок для вас.

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

Затем формируем заголовок файла:

// это строка сообщит браузеру что мы передаём jpg изображение header("content-type: image/jpeg");

Затем мы формируем png изображение и получаем его размеры:

// создание водяного знака в формате png $watermark = imagecreatefrompng("watermark.png"); // получаем ширину и высоту $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark);

То же самое сделаем и с оригинальным изображением, но только в формате jpg. Это обычное дело для фоток, которые загружаются через форму. Действуем следующим образом:

// создание jpg изображения $image_path = "original.jpg"; $image = imagecreatefromjpeg($image_path); // получаем размерность изображения $size = getimagesize($image_path);

Теперь нам надо поместить водяной знак на изображение:

// помещаем водяной знак в нижней части справа. Делаем отступ в 5px $dest_x = $size - $watermark_width - 5; $dest_y = $size - $watermark_height - 5;

Затем настроим опции смешивания для обоих изображений:

Imagealphablending($image, true); imagealphablending($watermark, true);

В конце концов мы создаём новое изображение используя параметры:

// создаём новое изображение imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg($image);

Важно убрать за собой:

// освобождаем память imagedestroy($image); imagedestroy($watermark);

Для регулирования прозрачности водяного знака можно использовать Photoshop.

С теорией всё. Теперь применим наши знания в реальном проекте. Всё это необходимо сохранить в файл. К примеру под названием watermark.php

Header("content-type: image/jpeg"); // получаем имя изображения через GET $image = $_GET["image"]; // создаём водяной знак $watermark = imagecreatefrompng("watermark.png"); // получаем значения высоты и ширины водяного знака $watermark_width = imagesx($watermark); $watermark_height = imagesy($watermark); // создаём jpg из оригинального изображения $image_path = "/path/to/image/folder/" . $image; $image = imagecreatefromjpeg($image_path); //если что-то пойдёт не так if ($image === false) { return false; } $size = getimagesize($image_path); // помещаем водяной знак на изображение $dest_x = $size - $watermark_width - 5; $dest_y = $size - $watermark_height - 5; imagealphablending($image, true); imagealphablending($watermark, true); // создаём новое изображение imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagejpeg($image); // освобождаем память imagedestroy($image); imagedestroy($watermark);

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

Владельцы сайтов (форумов, досок объявлений и т.д.) часто сталкиваются с проблемой создания водяных знаков на всех крупных изображениях сайта.

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

Решением данной проблемы может служить динамическое наложения водяного знака на изображение перед передачей его посетителю сайта.

В интернете есть решение данной проблемы в виде двух файлов, содержимое которых приведено ниже.
Исходный код файла ".htaccess"

DirectoryIndex index.php RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.*)$ /watermark/_watermark.php

Исходный код файла "_watermark.php"

250) && ($info_o > 250)) { // Для изображений без альфа-канала // Последний параметр функции - степень непрозрачности водяного знака imageCopyMerge($out, $watermark, ($info_o-$info_w)/2, ($info_o-$info_w)/2, 0, 0, $info_w, $info_w, 25); // Для изображений с альфа-каналом // В этом случае прозрачность регулируется альфа-каналом самого изображения // imageCopy($out, $watermark, ($info_o-$info_w)/2, ($info_o-$info_w)/2, 0, 0, $info_w, $info_w); } switch ($info_o) { case 1: imageGIF($out); break; case 2: imageJPEG($out); break; case 3: imagePNG($out); break; default: return false; } imageDestroy($out); imageDestroy($original); imageDestroy($watermark); return true; } ?>

Решение сводится к следующему, в каталог с файлами изображений помещается файл ".htaccess". Кроме него на сервере создается папка "watermark", в которой находится файл скрипта "_watermark.php" и собственно файл водяного знака "watermark.png".

При этом мною, по сравнению с оригинальной версией, встреченной в интернете, были внесены незначительные изменения в оба текстовых файла.

В файл ".htaccess", в регулярное выражение поиска файлов изображений добавлено расширение "jpeg", как тоже часто встречающееся.

Скрипт "_watermark.php" переработан таким образом, чтобы помещать водяной знак по центру изображения (этого требовала специфика решаемой задачи) и добавлена возможность регулировать прозрачность создаваемого водяного знака (комментарии в теле скрипта помогут Вам самостоятельно настроить этот параметр).

Также следует обратить внимание на тот факт, что помещая папку "watermark" в папку с изображениями, как советуют оригинальные источники, мы не добьемся желаемого результата, т.к. в этом случае нам придется иметь в каждой папке свой собственный файл ".htaccess" и папку "watermark". Это связано с тем, что в файле ".htaccess" указываются абсолютные пути от корневого каталога сайта к файлу "_watermark.php". Таким образом, имея в каждой папке с изображениями отдельную подпапку "watermark", в случае необходимости изменить водяной знак (либо скрипт, накладывающий его на изображение), нам придется произвести изменения во всех папках.

Чтобы избежать этой проблемы, я рекомендую создавать папку "watermark" в корневом каталоге сайта, а в каталоги изображений помещать файл ".htaccess" без необходимости каждый раз его менять. В этом случае для изменения водяного знака или скрипта нам необходимо будет внести изменения лишь в одном месте сайта. Создавать разные водяные знаки для разных папок с изображениями в таком случае можно ссылаясь из разных файлов ".htaccess" на разные скрипты, например "_watermark-1.php", "_watermark-2.php" и т.д.

Таким образом, подводя итог, можно сказать, что для наложения водяных знаков на все изображения сайта необходимо скачать прилагаемый ниже архив, распаковать его, папку "watermark" поместить в корневой каталог сайта, заменить в ней файл водяного знака "watermark.png" на свой собственный, а файл ".htaccess" помещать в те каталоги сайта, изображения из которых должны помечаться водяным знаком.

Скачать архив, содержащий все необходимые файлы можно по этой