首页 > 解决方案 > 在另一个上显示透明的 png 图像

问题描述

我正在尝试将透明的 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);

这就是结果: 结果

编辑: logo.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:图片

标签: php

解决方案


我通过注释一些行并调整尺寸以防止黑色背景修改了您的代码:

<?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); 

在此处输入图像描述

屏幕截图中的信封图像是尺寸为 64 * 64 px 的透明 png 图像。

更新:

如果要为徽标图像添加自定义背景并且要动态确定其尺寸,则必须使用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); 

透明示例: 在此处输入图像描述

在此处输入图像描述


推荐阅读