为什么这个透明的PNG在使用GD组合时会导致边界?

Ale*_*pin 6 php transparency gd image antialiasing

我正在尝试使用PHP从另一个图像创建一个图像.这是我的代码:

<?php
    $width = 109;
    $height = 109;
    $image = imagecreatetruecolor($width, $height);
    $source_under = imagecreatefrompng('ecloid_under.png');
    $black = imagecolorallocate($image, 0x00, 0x00, 0x00);

    imagecolortransparent($image, $black);

    imagecopy($image, $source_under, 0, 0, 0, 0, $width, $height);

    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);
?>
Run Code Online (Sandbox Code Playgroud)

所以我正在加载这个图像 $source_under

在此输入图像描述

并将其复制到透明的空白"画布"图像上.以下是该操作的结果:

在此输入图像描述

可以看出,整个初始图像周围有一种黑色边框.我认为这是因为最初"画布"图像都是黑色的.因此,图像的透明度和抗锯齿有问题.

这不是我第一次有类似的问题,但上次源图像是原因.这一次,在Photoshop中打开它并没有显示任何潜在的问题.

有谁知道如何解决这一问题?

huy*_*itw 8

在将原始文件复制到$ image之前,您是否可以尝试在$ image上启用Alpha混合:

imagealphablending($image, true); 
Run Code Online (Sandbox Code Playgroud)

第二次尝试是创建一个透明的颜色,并在复制之前用该颜色填充$ image.

$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
imagealphablending($image, true); 
Run Code Online (Sandbox Code Playgroud)