我正在尝试使用以下代码调整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)
,但它仍会上传带有黑色背景而非透明背景的图片。
问题出在哪里?
答案 0 :(得分:0)
这是因为您将透明图像复制到黑色图像上。您对aplhablending的错误设置仅适用于原始图像,因此当您复制新图像时,会打开aplha混合。
您的代码只需要一点改进:
$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
答案 1 :(得分:0)
imagecolorallocate($ SRC,0,0,0);
该行看起来像是从源获取图像,然后使用000背景。哪个是黑色的。只是一个猜测,不熟悉函数