使用gd在php中调整图像大小后的黑色背景
Posted
技术标签:
【中文标题】使用gd在php中调整图像大小后的黑色背景【英文标题】:Black background after resizing image in php using gd 【发布时间】:2014-03-15 01:06:42 【问题描述】:我使用下面的代码来调整图像大小(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);
【问题讨论】:
相关帖子:***.com/questions/5688954/… 【参考方案1】:imagesavealpha() 设置标志以尝试保存完整的 Alpha 通道 保存 PNG 时的信息(相对于单色透明度) 图片。
您必须取消设置 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);
【讨论】:
抱歉,它适用于 png 图像。但不适用于 gif。虽然它适用于 png,但获得的图像清晰度很差......颜色像那样传播。不能使用。有没有办法给白色背景而不是透明度?? 尝试使用imagecopyresampled
而不是imagecopyresized
【参考方案2】:
我也遇到过类似的问题,使用时还是会出现黑色背景:
imagealphablending($image, false);
imagesavealpha($image, true);
我发现以下组合是成功的:
imagecolortransparent($image, imagecolorallocate($thumbnail, 0, 0, 0));
imagealphablending($image, false);
【讨论】:
以上是关于使用gd在php中调整图像大小后的黑色背景的主要内容,如果未能解决你的问题,请参考以下文章