使用GD2将png转换为jpg ..透明度问题

时间:2011-03-15 00:55:46

标签: php png gd2

我有一个带有白色背景的image.png和一些trasparceny。

我试过将图像转换为jpg:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagejpeg($resource); //> I TRIED WITH QUALITY = 100 TOO

问题是png得到了透明度,现在jpg有一个非常巨大的黑区。这就是jpg的样子:

http://img861.imageshack.us/img861/20/context.jpg

有什么方法可以解决这个问题吗?

Edit1:

正如Abiusx所建议我也尝试了这个:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagealphablending($data, false);
imagesavealpha($data, true);
imagejpeg($resource);

但结果是一样的。请注意源.png图像是:

http://www.tipradar.com/wp-content/uploads/2010/02/Quicktime.png

感谢Patrick的评论:这里有诀窍:GD! Converting a png image to jpeg and making the alpha by default white and not black

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:-1)

这是我用来调整PNG大小但保持透明度的功能,如果没有帮助,请告诉我提取你需要的部分:

function Resize($ImageFile,$OriginalFile)
{
    $ext=basename($OriginalFile);
    $ext=explode(".",$ext);
    $ext=array_pop($ext);
    $ext=strtolower($ext);
    if ($ext=="jpg" or $ext=="jpeg" or $ext=="jpe")
        $img=imagecreatefromjpeg($ImageFile);
    elseif ($ext=="png")
        $img=imagecreatefrompng($ImageFile);
    elseif ($ext=="gif")
        $img=imagecreatefromgif($ImageFile);
    else
        return false;
    list($w,$h)=getimagesize($ImageFile);
    $dstimg=imagecreatetruecolor(140,100);

    imagealphablending($dstimg, false);
    imagecopyresampled($dstimg,$img,0,0,0,0,140,100,$w,$h);
    imagesavealpha($dstimg, true);
    imagepng($dstimg,$ImageFile);
    return true;
}