Показать прозрачное изображение PNG поверх другого - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь наложить прозрачное изображение PNG поверх другого PNG. Я следовал за другими ответами, но мне не удалось решить мою проблему. Вот что я сделал до сих пор:

header("Content-type: image/png");
$im = imagecreatefrompng("image/orange.png");
$trans_background = imagecolorallocate($im, 0, 0, 0, 127);
$logo = imagecreatefrompng($data["badgeUrls"]["medium"]);
imagesavealpha($logo, true);
imagefill($logo, 0, 0, $trans_background);  
imagecopy($im, $logo, 100, 100, 0, 0, 200, 200);
imagepng($im);
imagedestroy($logo);
imagedestroy($im);

и вот результат: результат

РЕДАКТИРОВАТЬ: lo go .png это прозрачно. Если я попробую этот код на html по той же ссылке, он будет работать:

<!DOCTYPE html>
<html>
<body style="background-color:powderblue;">
<img src="https://api-assets.clashofclans.com/badges/200/lTvtX122PSoz5wXzrzp5mFlw0y-72zVviKvuy9cXOFs.png">
</body>
</html>

Результат 2: pi c

1 Ответ

0 голосов
/ 26 апреля 2020

Я изменил ваш код, комментируя некоторые строки и корректируя размеры, чтобы предотвратить черный фон:

<?php
header("Content-type: image/png");
$im = imagecreatefrompng("orange.png");
//$trans_background = imagecolorallocate($im, 0, 0, 0, 127);
$logo = imagecreatefrompng('logo.png'); //logo image dimensions = 64 x 64 px
//imagesavealpha($logo, true);
//imagefill($logo, 0, 0, $trans_background);  
imagecopy($im, $logo, 100, 100, 0, 0, 64, 64); // dimensions of the logo image 64 * 64 px
imagepng($im);
imagedestroy($logo);
imagedestroy($im); 

enter image description here

Изображение конверта в Снимок экрана - прозрачное изображение PNG размером 64 * 64 пикселей.

Обновление:

Если вы хотите добавить собственный фон к изображению lo go и хотите динамически определять его размеры, вам придется использовать imagesx() для получения ширины и imagesy() для получения высоты. Кроме того, вы должны использовать imagecolorallocatealpha() в своем коде вместо imagecolorallocate()

<?php
header("Content-type: image/png");
$im = imagecreatefrompng("orange.png");
$trans_background = imagecolorallocatealpha($im, 0, 0, 100, 50); 
// Blue background // to be transparent imagecolorallocatealpha ($im, 0,0,0,127)
$logo = imagecreatefrompng('logo2.png');
imagesavealpha($logo, true);
imagefill($logo, 0, 0, $trans_background);  
imagecopy($im, $logo, 100, 100, 0, 0, imagesx($logo), imagesy($logo));
imagepng($im);
imagedestroy($logo);
imagedestroy($im); 

Прозрачный пример: enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...