PHP: добавление прозрачного PNG в JPEG с непрозрачностью - PullRequest
2 голосов
/ 11 марта 2012

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

Мой водяной знак 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>';
?>

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

1 Ответ

5 голосов
/ 11 марта 2012

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

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

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

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

imagecopymerge_alpha

...