Наложение водяных знаков с помощью PHP. Создание водяных знаков с помощью PHP Выбор способа нанесения водяного знака

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

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

Как оказалось, такое решение есть.

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

Выбор способа нанесения водяного знака

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

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

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

Если у кого-то есть более простой способ, то милости прошу в комментарии. Будет интересно послушать.

До приведения какого-то кода хотелось бы описать достоинства, а также привести рабочий пример.

Плюсы:

  • можно менять водяной знак хоть 500 раз на дню;
  • можно развернуть в любой CMS (к ней она никак не привязана).

Минусы:

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

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

Пример

Реализация нанесения водяного знака с помощью PHP

Как и обещал для этого не нужно обладать какими-то особыми знаниями, необходимо:

  1. файл , который находится в архиве, и поместить в корневую директорию вашего сайта;
  2. изображение, которое будет выступать в роли водяного знака, помещаем в корневую директорию сайта и обзываем (в моем случае это белый мазок кисти, поэтому по ссылке он может быть не различим на фоне вашего браузера). Изображение должно быть именно PNG , так как в нем есть прозрачный слой. Если хотите использовать GIF , то необходимо редактировать файл image.php ;
  3. в том месте, где нужно вывести изображение с водяным знаком, помещаем код:

Вот и всё. Все довольны, и Вы, и заказчик.

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

Рассмотрим пример кода, который демонстрирует наложение водного знака, на загружаемые картинки.

Итак, основные настройки содержаться в виде констант, и идут в коде первыми:

// путь изображению водяного знака define("WATERMARK_OVERLAY_IMAGE", "/lab/watermark/watermark.png"); // Сжатие, диапазон 0-100 (влияет на качетсво изображения) define("WATERMARK_OUTPUT_QUALITY", 100); // папка с исходными изображениями define("UPLOADED_IMAGE_DESTINATION", "/lab/watermark/upload/src/"); // папка с обработанными изображениями define("WATERMARK_IMAGE_DESTINATION", "/lab/watermark/upload/");

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

Выберите файл изображения:
Исходное изображение
" style="max-width: 300px;" />
Изображение с водяным знаком
" style="max-width: 300px;" />

Ну а теперь самое основное, это функции для обработки изображения. Разместить эти функции следует перед показом формы на странице.

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

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

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

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

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

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

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

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

// это строка сообщит браузеру что мы передаём 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);

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