Добавление водяного знака на фото средствами PHP


Если вы хотите добавить водяной знак на фото, не заморачиваясь с графическими редакторами или добавлять его во время загрузки фоток на сервер, то это урок для вас. В этом уроке я покажу вам как добавить водяной знак на изображение на лету, фактически не изменяя исходное изображение. В первую очередь, вам понадобится изображение, которое вы будете использовать в качестве водяного знака. Затем формируем заголовок файла: 1 // это строка сообщит браузеру что мы передаём jpg изображение 2 header('content-type: image/jpeg'); Затем мы формируем png изображение и получаем его размеры: 1 // создание водяного знака в формате png 2 $watermark = imagecreatefrompng('watermark.png'); 3 // получаем ширину и высоту 4 $watermark_width = imagesx($watermark); 5 $watermark_height = imagesy($watermark); То же самое сделаем и с оригинальным изображением, но только в формате jpg. Это обычное дело для фоток, которые загружаются через форму. Действуем следующим образом: 1 // создание jpg изображения 2 $image_path = 'original.jpg'; 3 $image = imagecreatefromjpeg($image_path); 4 // получаем размерность изображения 5 $size = getimagesize($image_path); Теперь нам надо поместить водяной знак на изображение: 1 // помещаем водяной знак в нижней части справа. Делаем отступ в 5px 2 $dest_x = $size[0] - $watermark_width - 5; 3 $dest_y = $size[1] - $watermark_height - 5; Затем настроим опции смешивания для обоих изображений: 1 imagealphablending($image, true); 2 imagealphablending($watermark, true); В конце концов мы создаём новое изображение используя параметры: 1 // создаём новое изображение 2 imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); 3 imagejpeg($image); Важно убрать за собой: 1 // освобождаем память 2 imagedestroy($image); 3 imagedestroy($watermark); Для регулирования прозрачности водяного знака можно использовать Photoshop. С теорией всё. Теперь применим наши знания в реальном проекте. Всё это необходимо сохранить в файл. К примеру под названием watermark.php 01 header('content-type: image/jpeg'); 02 03 // получаем имя изображения через GET 04 $image = $_GET['image']; 05 06 // создаём водяной знак 07 $watermark = imagecreatefrompng('watermark.png'); 08 09 // получаем значения высоты и ширины водяного знака 10 $watermark_width = imagesx($watermark); 11 $watermark_height = imagesy($watermark); 12 13 // создаём jpg из оригинального изображения 14 $image_path = '/path/to/image/folder/' . $image; 15 $image = imagecreatefromjpeg($image_path); 16 //если что-то пойдёт не так 17 if ($image === false) { 18 return false; 19 } 20 $size = getimagesize($image_path); 21 // помещаем водяной знак на изображение 22 $dest_x = $size[0] - $watermark_width - 5; 23 $dest_y = $size[1] - $watermark_height - 5; 24 25 imagealphablending($image, true); 26 imagealphablending($watermark, true); 27 // создаём новое изображение 28 imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); 29 imagejpeg($image); 30 // освобождаем память 31 imagedestroy($image); 32 imagedestroy($watermark); Теперь для того, чтобы показать фотку на которой будет водяной знак не изменяя исходное изображение, используйте следующий код: 1 <img src="watermark.php?image=original.jpg" alt="Какой-то текст" /> Таким образом, мы передаём только имя изображения и получаем то что нам нужно, не изменяя исходное изображение.