Водяной знак у нас будет картинка, расположим ее в нижнем правом углу картинки, которая является исходной.
Все что нужно, это загрузить две картинки, определить их размер, высчитать координаты для водяного знака и сделать наложение картинок друг на друга.
Ниже приведен код с подробными комментариями:
<?php
$img = "test.jpg"; // исходная картинка
$size = getimagesize($img); // получаем размер картинки
$height = $size[1]; // высота
$width = $size[0]; // ширина
$watermark_src = 'watermark.png'; // картинка, которая будет в качестве водяного знака
$sizeWM = getimagesize($watermark_src); // получаем размер водяного знака
$heightWM = $sizeWM[1]; // высота водяного знака
$widthWM = $sizeWM[0]; // ширина водяного знака
$opacity = 40; // задаем прозрачность водяного знака
//Загружаем изображения
$image = imagecreatefromjpeg($img);
$watermark = imagecreatefrompng($watermark_src);
//Введем и сохраним высоту и ширину наших изображений
list($watermark_width, $watermark_height) = getimagesize($watermark_src);
// высчитываем координаты, для водяного знака. Внизу справа
$x = $width - $widthWM;
$y = $height - $heightWM;
//Копируем водный знак на изображение
imagecopymerge($image, $watermark, $x, $y, 0, 0, $watermark_width, $watermark_height, $opacity);
// сохраняем картинку
imagejpeg($image, $img, 100);
// задаем заголовок, чтоб отобразить картинку
header('Content-Type: image/jpeg');
// выводим картинку в браузер
imagejpeg($image);
// очищаем память
imagedestroy($image);
imagedestroy($watermark);
?>