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[0] - $watermark_width - 5;
 	$dest_y = $size[1] - $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[0] - $watermark_width - 5;
 	$dest_y = $size[1] - $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);

Теперь для того, чтобы показать фотку на которой будет водяной знак не изменяя исходное изображение, используйте следующий код:
 	<img src="watermark.php?image=original.jpg" alt="Какой-то текст" />

Таким образом, мы передаём только имя изображения и получаем то что нам нужно, не изменяя исходное изображение.
Добавлено: 21 Августа 2013 08:51:02 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...