php - 在另一个上显示透明的 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
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);
推荐阅读
- javascript - 从 api 获取数据后映射和过滤方法不起作用
- linux - 如何在 Linux 中模拟远程网络设备?
- android - Kotlin 导航抽屉活动路由参数
- xamarin - Macincloud 上的 Xamarin.iOS 开发和自动预配设置
- node.js - 强制 node.js socket.io 2.4 监听 127.0.0.1
- calculated-columns - 如何将排名函数嵌入到 Spotfire 中计算列的 AllPrevious 函数中
- python - 尝试在 Python Clifford Algebra 包中使用 sin() 方法
- javascript - 使用 javascript 上传、调整大小并将图像发送到服务器
- tensorflow - 在 4 维(4D 张量)的输入上使用 MaxPool1D?
- c - C程序将二进制小数转换为十进制