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

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

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

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

В интернете есть решение данной проблемы в виде двух файлов, содержимое которых приведено ниже.
Исходный код файла ".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" помещать в те каталоги сайта, изображения из которых должны помечаться водяным знаком.

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

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

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

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

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

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

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

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

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

// путь изображению водяного знака 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;" />

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

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

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

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

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

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

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

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

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

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

Похожие статьи

  • Как узнать свой КПД в World Of Tanks?

    КПД в World of Tanks - это коэффициент полезного действия игрока, польза которую вы принесли команде за бой. В расчет КПД входит нанесенный дамаг, убитая техника, засветы, помощь команде. Как поднять КПД в World of Tanks? В этой статье мы...

  • Теплоход сура. И двигается, и рулит

    В 19 веке и первой половине двадцатого столетия наши реки бороздили колесные пассажирские и буксирные суда. Этим летом в первый рейс по Волге отправится современный колесник. Однако это вовсе не дань моде на ретро. Небольшой по размерам и...

  • Крымский мост: кто на самом деле топит украинские порты?

    12:29 — REGNUM ИА REGNUM продолжает знакомить читателей с объектами инфраструктуры Украины. А ключевой элемент инфраструктуры любой страны, имеющей выход к морю, — порты. Инфраструктуры не только транспортной, но и экономической,...

  • Интернет- мешает нормально жить

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

  • Медленно работает интернет

    Интернет на вашем мобильном более уязвим к внешним условиям, чем ноутбуки и компьютеры. Сигнал во многом зависит от зон покрытия 2G и 3G, Wi-Fi точек, мощности станций-трансляторов, погодных условий и вашей личной кармы. Очень часто...

  • InstallPack скачать бесплатно русская версия

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