Вы можете попытаться изменить местоположение логотипа / водяного знака.
Вам просто нужно получить координаты (левый и верхний) четырех углов в watermark.png и сместить их на четыре координаты image.jpg:
$image = new Imagick('image.jpg');
$watermark = new Imagick('watermark.png');
$controlPoints = [
300,1700 /* watermark.png (left,top) coordinate moves to image.jpg (left,top) coordinate */ 800,900, // TOP LEFT CORNER
1963,1700, /* to */ 1450,900, // TOP RIGHT CORNER
1963,2500, /* to */ 1450,1100, // BOTTOM RIGHT CORNER
300,2500, /* to */ 800,1100, // BOTTOM LEFT CORNER
];
$watermark->distortImage(Imagick::DISTORTION_BILINEAR, $controlPoints, false);
$image->addImage($watermark);
$result = $image->mergeImageLayers(Imagick::LAYERMETHOD_MERGE);
echo '<img src="data:image/jpg;base64,'. base64_encode($result->getImageBlob()) . '" alt="test" />';
Вы можете играть свободнос контрольными точками.
Но будьте осторожны , если вы используете изображения с разными размерами, потому что если одна из координат назначения выходит за пределы размера изображения для искажения (водяной знак), вы должны изменить на:
$watermark->distortImage(Imagick::DISTORTION_PERSPECTIVE, $controlPoints, true);
Вы должны изменить первый и третий аргументы.