Наложение водяных знаков с помощью PHP

Категория: Веб-программирование| Интересное| Полезные заметки

1 Авг 2013

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

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

Помочь в защите Ваших авторских прав призван данный скрипт, написанный на PHP.

Создадим, вначале, файл содержащий необходимые настройки в виде констант – /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/'); // Путь к изображениям с наложенным ЦВЗ

Далее создадим файл с функциями, осуществляющими загрузку оригинального изображение и создание его копии с водяным знаком на борту – /functions.php.

<?
/*Функция добавления водяного знака на исходное изображение*/
function AddWaterMark($source_image_path, $result_image_path)
{
// Получаем ширину, высоту и тип исходного изображения
list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
// Если по каким, то причинам неопределн тип, нам не стоит выполнять какие-либо действия с водяным знаком, по скольку это не картинка вовсе
if ($source_image_type === NULL) {
return false;
}
// Создаем, так называемый ресурс изображения из исходной картинки в зависимости от типа исходной картинки
switch ($source_image_type) {
case 1: // картинка *.gif
$source_image = imagecreatefromgif($source_image_path);
break;
case 2: // картинка *.jpeg, *.jpg
$source_image = imagecreatefromjpeg($source_image_path);
break;
case 3: // картинка *.png
$source_image = imagecreatefrompng($source_image_path);
break;
default:
return false; // Если картинка другого формата, или не картинка совсем, то опять же не стоит делать, что либо дальше с водяным знаком
}
// Создаем ресурс изображения для нашего водяного знака
$watermark_image = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'].WATERMARK_OVERLAY_IMAGE);
// Получаем значения ширины и высоты
$watermark_width = imagesx($watermark_image);
$watermark_height = imagesy($watermark_image);
// Наложение ЦВЗ с прозрачным фоном
imagealphablending($source_image, true);
imagesavealpha($source_image, true);
// Самая важная функция - функция копирования и наложения нашего водяного знака на исходное изображение
imagecopy($source_image, $watermark_image, $source_image_width - $watermark_width, $source_image_height - $watermark_height, 0, 0, $watermark_width, $watermark_height);

// Создание и сохранение результирующего изображения с водяным знаком
imagejpeg($source_image, $result_image_path, WATERMARK_OUTPUT_QUALITY);
// Уничтожение всех временных ресурсов
imagedestroy($source_image);
imagedestroy($watermark_image);
}

/*Функция загрузки изображения*/
function ImageUpload($temp_path, $temp_name)
{
// Получаем параметры изображения
list($temp_width, $temp_height, $temp_type) = getimagesize($temp_path);
// Если тип определить не получилось, то возвращаем FALSE
if ($temp_type === NULL) {
return false;
}
// Если тип загружаемого файла не GIF, JPEG, PNG
switch ($temp_type) {
case 1:
break;
case 2:
break;
case 3:
break;
default:
return false;
}
// Конечные пути для сохранения
$upload_image_path = UPLOADED_IMAGE_DESTINATION . $temp_name;
$watermark_image_path = WATERMARK_IMAGE_DESTINATION . preg_replace('/\\.[^\\.]+$/', '.jpg', $temp_name);
// Загружаем исходное изображение
move_uploaded_file($temp_path, $_SERVER['DOCUMENT_ROOT'].$upload_image_path);
// Создаем копию изображения и добавляем водяной знак
$result = AddWaterMark($_SERVER['DOCUMENT_ROOT'].$upload_image_path, $_SERVER['DOCUMENT_ROOT'].$watermark_image_path);
// В случае, если все прошло упешно, возвращаем путь к файлу с ЦВЗ
if ($result === false) {
return false;
} else {
return array($upload_image_path, $watermark_image_path);
}
}
?>

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

include ("config.php");
include ("functions.php");

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

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

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

Пример, Вы можете скачать по ссылке:

  php_script_addwatermark_by_blogzor (178,4 KiB, 924 hits)

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

Кстати, очень интересно:

Опубликовать в twitter.com Опубликовать в своем блоге livejournal.com Поделится ссылкой на yandex.ru

Комментариев к записи: 5

yournet

6 Сентябрь 2015 в 12:09 пп

Полезный скрипт! Взял на заметку.

Олег

12 Сентябрь 2015 в 5:40 пп

Это не наложение водяного знака, а просто наложение одного изображения на другое.

Дмитрий

13 Сентябрь 2015 в 7:09 пп

Скачал скрипт, не работает.No such file or directory in Z:\home\localhost\www\watermark\functions.php on line 67

Дмитрий

13 Сентябрь 2015 в 7:13 пп

Заработало, надо было малость поменять путь в config.php к папкам.

Алексей

26 Февраль 2016 в 11:41 дп

Подскажите, а как заставить этот скрипт отработать? я только начал осваивать программирование сайтов

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

Вы должны Войти, чтобы оставить комментарий.

О блоге

Данный блог создан с целью помочь, как начинающему вебмастеру, так и опытному разработчику, в решении проблем возникающих при разработке сайтов. Здесь Вы прочитаете полезные статьи о том, как грамотно произвести SEO оптимизацию своего сайта, и найдёте важные исследования в сфере интернет-маркетинга. Научитесь писать собственные компоненты и модули для известных CMS, а также узнаете интересные методы работы с Фреймворками, CSS, HTML, jQuery и PHP. Из записей блога вы поймёте как грамотно разрабатывать макеты сайтов и что такое валидная вёрстка. БЛОГZOR – поможет Вам стать web-Гуру и понять тонкости веб-мастеринга.

Последние комментарии

  • Амир: форма появилась на сайте, но письмо не приходит на [...]
  • Ян: Все нравится, единственное, раскрывающийся блок мо [...]
  • СПАСИБО!: Спасибо тебе! Замечательная функция. очень помогла [...]
  • Алексей: Подскажите, а как заставить этот скрипт отработать [...]
  • Дмитрий: Заработало, надо было малость поменять путь в conf [...]

Можно Скачать