在使用gd在php中调整图像大小后的黑色背景

时间:2014-03-15 01:06:42

标签: php 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);

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我也有类似的麻烦,使用时仍会出现黑色背景:

imagealphablending($image, false);
imagesavealpha($image, true);

我发现以下组合是成功的:

imagecolortransparent($image, imagecolorallocate($thumbnail, 0, 0, 0));
imagealphablending($image, false);