PHP: добавьте прозрачный PNG в JPEG с непрозрачностью

Это, кажется, общий вопрос, но, пытаясь найти все комбинации, я нашел, он все еще не работает для меня.

Мой водяной знак PNG прозрачен, и я хочу наложить исходный JPG на этот водяной знак и добавить 50% непрозрачность к водяному знаку.

Добавлен водяной знак и создается непрозрачность, но прозрачность PNG отображается как непрозрачный белый.

Я видел примеры с использованием imagecopy() но у этой функции нет возможности добавлять непрозрачность.

Мой код выглядит следующим образом:

 <?php $file = 'orgCar.jpg'; $newfile = 'newCar.jpg'; if (!copy($file, $newfile)) { echo "failed to copy $file...\n"; } $tempIMG = imagecreatefromjpeg($newfile); $wmkIMG = imagecreatefrompng('wmark.png'); imagealphablending($wmkIMG,true); imagecopymerge($tempIMG, $wmkIMG, 755, 864, 0, 0, 465, 36, 50); // Save the image to file and free memory imagejpeg($tempIMG,'newWM.jpg'); imagedestroy($orgIMG); imagedestroy($wmkIMG); echo '<h3>Testing of Watermarking</h3>'; echo '<div>'; echo '<img width="160" src="orgCar.jpg" title="original" alt"" />'; echo '<img width="160" src="newCar.jpg" title="copy" alt"" />'; echo '<img width="240" src="wmark.png" title="watermark" alt"" /><br>'; echo '<img width="640" src="newWM.jpg" title="New with Watermark" alt"" />'; echo '</div>'; ?> 

Если есть простой ответ, я упустил из виду, тогда я был бы очень благодарен, если бы кто-то мог указать мне на это.

Проблема в том, что количество прозрачности, которое вы передаете imagecopymerge() , используется вместо альфа-канала изображения, а не добавлено к нему.

У вас есть два варианта:

1) Измените PNG так, чтобы он включал 50% непрозрачность, а затем использовал imagecopy() (я тестировал его и отлично работал). Помните, что в True-color PNG можно использовать полный альфа-канал, чтобы вы могли включить полупрозрачность изображения.

2) используйте обходной путь, подобный описанному здесь:

imagecopymerge_alpha