Прозрачная PNG над JPG в PHP

То, что кажется простым, не является 🙁

Я пытаюсь добавить что-то вроде водяного знака (прозрачный png) на изображении (jpg). Это код, который я использую:

$width = 800; $height = 600; $bottom_image = imagecreatefromjpeg("portrait1.jpg"); $top_image = imagecreatefrompng("man2.png"); imagesavealpha($top_image, true); imagealphablending($top_image, true); imagecopy($bottom_image, $top_image, 200, 200, 0, 0, $width, $height); header('Content-type: image/png'); imagepng($bottom_image); 

Когда я объединять изображения, png расположен в нужном месте, каждый из них выше и слева от него хорош (jpg копируется), но все остальное черное.

Я пробовал устанавливать imagesavealpha и imagealphablending на false, не было никакой разницы.

Вы можете увидеть результирующее изображение по адресу http://ekstrakt.selfip.com/photobomb/image.php

Я искал по сети, я не могу найти решение.

Любая помощь приветствуется.

Ваши $width и $height должны быть размером водяного знака, а не фотографии. То, что вы говорите, нужно скопировать водяной знак с гораздо большим размером, чем есть. Когда он читает часть изображения, которое не существует (координаты за пределами), результат является непрозрачным черным, давая результат, который вы видите.

Используйте imagecopymerge () вместо imagecopy()

U может также понравиться imagesavealpha ()