Io uso questa funzione:
function waterMark2($fileInHD, $wmFile, $transparency = 100, $jpegQuality = 90, $margin = 5) {
$wmImg = imageCreateFrompng($wmFile);
$jpegImg = imageCreateFromJPEG($fileInHD);
$size = getimagesize("$fileInHD");//Ritorna una matrice di 4 elementi
// Water mark position
$wmX = $size[0] - 150 - $margin;
$wmY = $size[1] - 50 - $margin;
// Water mark process
imageCopyMerge($jpegImg, $wmImg, $wmX, $wmY, 0, 0, imageSX($wmImg), imageSY($wmImg), $transparency);
// Overwriting image
ImageJPEG($jpegImg, $fileInHD, $jpegQuality);
imagedestroy($jpegImg);
imagedestroy($wmImg);
}