[英]Black background after resizing image in php using gd
我使用下面的代码来调整图像大小(jpg,png,gif)。 代码工作得很好。 但问题是在调整图像大小后,所有透明图像(png和gif)都有黑色背景。
如何保持透明度,使调整后的图像不具有黑色背景?
$target = 'uploads/'.$newname;
move_uploaded_file( $_FILES['file']['tmp_name'], $target);;
$filename=$newname;
if($ext=='jpg'||$ext=='jpeg') {
$im = imagecreatefromjpeg('uploads/'.$filename);
} else if ($ext=='gif') {
$im = imagecreatefromgif('uploads/'.$filename);
} else if ($ext=='png') {
$im = imagecreatefrompng('uploads/'.$filename);
}
$ox = imagesx($im);
$oy = imagesy($im);
$nm = imagecreatetruecolor(400, 300);
imagecopyresized($nm, $im, 0,0,0,0,400,300,$ox,$oy);
imagejpeg($nm, 'thumbnails/' . $filename);
imagesavealpha()设置标志以在保存PNG图像时尝试保存完整的Alpha通道信息(而不是单色透明度)。
你必须取消设置alphablending(imagealphablending($ im,false))才能使用它。
尝试添加
imagealphablending( $nm, FALSE );
imagesavealpha( $nm, TRUE );
这里:
.
.
$nm = imagecreatetruecolor(400, 300);
imagealphablending( $nm, FALSE );
imagesavealpha( $nm, TRUE );
.
.
还可以考虑使用imagecopyresampled而不是imagecopyresized 。
imagecopyresampled()平滑地插入像素值,以便特别是减小图像的大小仍然保持很大的清晰度。
使用imagecopyresampled($nm, $im, 0,0,0,0,400,300,$ox,$oy);
而不是imagecopyresized($nm, $im, 0,0,0,0,400,300,$ox,$oy);
我也有类似的麻烦,使用时仍然出现黑色背景:
imagealphablending($image, false);
imagesavealpha($image, true);
我发现下面的组合是成功的:
imagecolortransparent($image, imagecolorallocate($thumbnail, 0, 0, 0));
imagealphablending($image, false);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.