Это, кажется, общий вопрос, но, пытаясь найти все комбинации, я нашел, он все еще не работает для меня.
Мой водяной знак 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