Если вы хотите добавить водяной знак на фото, не заморачиваясь с графическими редакторами или добавлять его во время загрузки фоток на сервер, то это урок для вас.
В этом уроке я покажу вам как добавить водяной знак на изображение на лету, фактически не изменяя исходное изображение. В первую очередь, вам понадобится изображение, которое вы будете использовать в качестве водяного знака.
Затем формируем заголовок файла:
// это строка сообщит браузеру что мы передаём 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="Какой-то текст" />
Таким образом, мы передаём только имя изображения и получаем то что нам нужно, не изменяя исходное изображение.