0

我正在尝试使用以下代码调整 PNG 透明图像的大小:

$src=ImageCreateFrompng($uploadedfile);
$background=imagecolorallocate($src,0,0,0);
imagecolortransparent($src,$background);
imagealphablending($src,false);
imagesavealpha($src,true);
$dst=ImageCreateTrueColor($tn_width,$tn_height);
imagecopyresampled($dst,$src,0,0,0,0,$tn_width,$tn_height,$width,$height);
Imagepng($dst,$dstfile);

我使用过imagealphablending($src,false)imagesavealpha($src,true)但它仍然上传黑色背景的图像而不是透明的图像。

问题出在哪里?

4

2 回答 2

0

这是因为您将透明图像复制到黑色图像上。您对 aplhablending 的错误设置仅适用于原始图像,因此当您在新图像上复制时,aplha blending 已打开。
您的代码只需要一点改进:

$transparent = imagecolorallocatealpha($dst, 0,0,0,127);  //Transparent background color
imagealphablending($dst,false);            //Not to compound transparent colors with opaque
imagesavealpha($dst,true);                 //Allow transparency
imagefilledrectangle($dst, 0, 0, imagesx($dst), imagesy($dst), $transparent);   //Give the destination image transparent background
//Now you can copy

要不就

imagealphablending($dst,false);   //I'm not 100% sure this will make it, but its worth a try
于 2013-02-04T13:39:41.817 回答
0

imagecolorallocate($src,0,0,0);

该行看起来像是从源获取图像,然后使用 000 背景。哪个是黑色的。只是猜测,对功能不熟悉

于 2013-02-04T13:41:47.060 回答