添加 imagecopymerge 时透明背景的图像变白
Image with transparanent background becoming white when added with imagecopymerge
我正在使用 imagecopymerge
将一个图像放在另一个图像之上,但是,当我这样做时,图像的透明部分变成白色,这不是我想要的。所以我有以下图片作为背景:
我在上面添加的透明背景图片是这样的:
然而,这(连同我的其余代码)导致圆圈周围的区域以及边界内的区域为白色:
我目前用来注入值的代码是:
$magical = imagecreatefrompng('Magical.png');
imagecopymerge($img, $magical, 366, 135, 0, 0, 32, 32, 100);
研究表明我应该尝试使用 imagealphablending
或 imagecopy
之类的东西而不是 imagecopymerge
,但这没有用。我还找到了尝试 imagecolortransparent
和 imagecolorallocate
的参考文献,但这也没有用。因此,例如,这些尝试均无效:
$magical = imagecreatefrompng('Magical.png');
$white = imagecolorallocate($output, 255, 255, 255);
imagecolortransparent($magical, $white);
imagecopymerge($img, $magical, 366, 135, 0, 0, 32, 32, 100);
// or this attempt
$magical = imagecreatefrompng('Magical.png');
imagealphablending($img, true);
imagealphablending($magical, true);
imagecopymerge($img, $magical, 366, 135, 0, 0, 32, 32, 100);
我在这里错过了什么?如何确保将图像添加到另一个图像时保留其透明度?
我将您的图像拉入我的本地机器并使用 PHP 文档中列出的 imagecopymerge_alpha 功能 - https://www.php.net/manual/en/function.imagecopymerge.php#92787
<?php
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying relevant section from background to the cut resource
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// copying relevant section from watermark to the cut resource
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
// insert cut resource to destination image
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}
$img = imagecreatefrompng('baseImage.png');
$magical = imagecreatefrompng('overlay.png');
imagecopymerge_alpha($img, $magical, 366, 135, 0, 0, 32, 32, 100);
imagepng($img, "./test.png");
我正在使用 imagecopymerge
将一个图像放在另一个图像之上,但是,当我这样做时,图像的透明部分变成白色,这不是我想要的。所以我有以下图片作为背景:
我在上面添加的透明背景图片是这样的:
然而,这(连同我的其余代码)导致圆圈周围的区域以及边界内的区域为白色:
我目前用来注入值的代码是:
$magical = imagecreatefrompng('Magical.png');
imagecopymerge($img, $magical, 366, 135, 0, 0, 32, 32, 100);
研究表明我应该尝试使用 imagealphablending
或 imagecopy
之类的东西而不是 imagecopymerge
,但这没有用。我还找到了尝试 imagecolortransparent
和 imagecolorallocate
的参考文献,但这也没有用。因此,例如,这些尝试均无效:
$magical = imagecreatefrompng('Magical.png');
$white = imagecolorallocate($output, 255, 255, 255);
imagecolortransparent($magical, $white);
imagecopymerge($img, $magical, 366, 135, 0, 0, 32, 32, 100);
// or this attempt
$magical = imagecreatefrompng('Magical.png');
imagealphablending($img, true);
imagealphablending($magical, true);
imagecopymerge($img, $magical, 366, 135, 0, 0, 32, 32, 100);
我在这里错过了什么?如何确保将图像添加到另一个图像时保留其透明度?
我将您的图像拉入我的本地机器并使用 PHP 文档中列出的 imagecopymerge_alpha 功能 - https://www.php.net/manual/en/function.imagecopymerge.php#92787
<?php
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying relevant section from background to the cut resource
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// copying relevant section from watermark to the cut resource
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
// insert cut resource to destination image
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}
$img = imagecreatefrompng('baseImage.png');
$magical = imagecreatefrompng('overlay.png');
imagecopymerge_alpha($img, $magical, 366, 135, 0, 0, 32, 32, 100);
imagepng($img, "./test.png");