Создайте изображение на x пикселей выше, скопируйте исходное изображение в него в позиции (0,0)
, а затем водяной знак в позиции (0,original_height)
:
$image = 'foo.jpg';
$watermark = 'watermark.png';
$imagesize = getimagesize($image);
$watermarksize = getimagesize($watermark);
$img = imagecreatetruecolor($imagesize[0], $imagesize[1] + $watermarksize[1]);
imagecopy($img, imagecreatefromjpeg($image), 0, 0, 0, 0, $imagesize[0], $imagesize[1]);
imagecopy($img, imagecreatefrompng($watermark), 0, $imagesize[1], 0, 0, $watermarksize[0], $watermarksize[1]);
imagejpeg($img);
Не проверено, но должно работать так. Код предполагает, что водяной знак не шире исходного изображения.