上传png图像黑色背景

时间:2015-07-23 22:51:09

标签: php image file-upload png jcrop

当我使用php上传png图像时,图像的背景颜色被设置为黑色 我试图将它设置为透明背景,但它不起作用 这是我的代码:

if( $image_type == IMAGETYPE_PNG )
{
    $dst_r = ImageCreateTrueColor($targ_w, $targ_h);
    imagealphablending($dst_r, false);
    imagesavealpha($dst_r, true);
    imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));
    imagecopyresampled($dst_r, $this->image, 0, 0, $targ_x, $targ_y, $targ_w, $targ_h, $targ_w, $targ_h);
    imagepng($dst_r,$filename, 9);
}

编辑:

我认为我已经完成了这个问题,但我错了:

$targ_w_thumb = $targ_h_thumb = 220;
if($image_type == IMAGETYPE_PNG)
{
    $dst_r = ImageCreateTrueColor($targ_w_thumb, $targ_h_thumb);
    imagealphablending($dst_r, false);
    imagesavealpha($dst_r, true);
    imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));
    imagecopyresampled($dst_r, $this->image, 0, 0, $targ_x, $targ_y, $targ_w_thumb, $targ_h_thumb, $targ_w, $targ_h);
    imagepng($dst_r,$filename, 9);
}

2 个答案:

答案 0 :(得分:0)

imagecreatetruecolor()创建一个充满不透明黑色的图像。除非先用透明度填充新图像,否则黑色将在稍后显示。

你需要的只是一个透明色的imagefill() - 即黑色,如下:

imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));  // transparency values range from 0 to 127

应用于您的代码,这应该有效:

if( $image_type == IMAGETYPE_PNG )
{
    $dst_r = ImageCreateTrueColor($targ_w, $targ_h);
    imagealphablending($dst_r, false);
    imagesavealpha($dst_r, true);

    // Paint the watermark image with a transparent color to remove the default opaque black.
    // If we don't do this the black shows through later colours.
    imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));

    imagecopyresampled($dst_r, $this->image, 0, 0, $targ_x, $targ_y, $targ_w, $targ_h, $targ_w, $targ_h);
    imagepng($dst_r,$filename, 9);
}

答案 1 :(得分:0)

我不知道为什么但是当我添加targ_w_thumb时它的工作正常+ imagefill():

    $targ_w_thumb = $targ_w_thumb = 200;
    $dst_r = ImageCreateTrueColor($targ_w_thumb, $targ_h_thumb);
    imagealphablending($dst_r, false);
    imagesavealpha($dst_r, true);
    imagefill($dst_r,0,0,imagecolorallocatealpha($dst_r, 0,0,0,127));
    imagecopyresampled($dst_r, $this->image, 0, 0, $targ_x, $targ_y, $targ_w_thumb, $targ_h_thumb, $targ_w, $targ_h);
    imagepng($dst_r,$filename, 9);