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

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

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

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

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