我正在尝试使用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);
?>
所以我在$source_under
并将其复制到透明的空白“画布”图像上。以下是该操作的结果:
可以看出,整个初始图像周围有一种黑色边框。我认为这是因为最初“画布”图像都是黑色的。因此,图像的透明度和抗锯齿有问题。
这不是我第一次遇到类似问题,但上次源图像是原因。这一次,在Photoshop中打开它并没有显示任何潜在的问题。
有谁知道如何解决这个问题?
答案 0 :(得分:7)
在将原件复制到$ image之前,您是否可以尝试在$ image上启用Alpha混合:
imagealphablending($image, true);
第二次尝试是创建一个透明的颜色,并在复制前用该颜色填充$ image。
$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
imagealphablending($image, true);
答案 1 :(得分:3)
源图像边缘周围有部分透明度。这使得它与画布图像的黑色相结合(您通常无法看到它,因为它是100%透明的),给出您看到的结果。您可以通过确保源图像上的整个Alpha通道为100%或0%,或者为画布图像选择更合适的基色(即与您网站的背景颜色方案匹配的颜色)来避免这种情况。 / p>
Fabio Anselmo的评论将有助于GIF没有真正的alpha通道 - GIF透明度是全有或全无 - 所以节省一个人将完成100%或0%的解决方案。除非你非常小心,它还会在源图像中为你提供一个“边框” - 由你拥有的任何背景颜色或在GIF转换中选择 - 作为图像的抗锯齿效果。 (但是,隔行扫描部分无关紧要。)