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

Posted

技术标签:

【中文标题】使用 GD2 将 png 转换为 jpg .. 透明度问题【英文标题】:Converting a png to jpg with GD2.. transparency problem 【发布时间】:2011-03-15 00:55:45 【问题描述】:

我有一个白色背景的 image.png,上面有一些透明度。

我尝试将图像转换为 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

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

编辑1:

按照 Abiusx 的建议,我也尝试过:

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

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

(来源:tipradar.com)

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

【问题讨论】:

我不记得了,但是 php 网站上提供了帮助(通过 cmets),我会在此查找并稍后发布。 哦,Jpeg 不支持透明度。我没看你的标题。只有 PNG 和 GIf 支持透明度。 @abiusx: 是的,我不想在我的 jpg 中保留 traspareceny,我只想要没有那个黑色补丁的最终 jpg 看看这个 SO question 【参考方案1】:

在这里回答:

GD! Converting a png image to jpeg and making the alpha by default white and not black

【讨论】:

【参考方案2】:

这是我用来调整 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;

【讨论】:

伙计,我不想从另一个 png 打印出一个 png.. 我需要将一个 png 转换为一个 .jpg 而没有黑色补丁:) 检查最后4个函数,主要是imagealphablending和imagecopyresampled和imagesavealpha 好吧,我用过,结果还是那个黑色的补丁。我做了:imagecreatefromstring、imagealphablendin、imagesavealpha 和 imagejpeg(我不需要重新采样,所以我没有使用它) 请到 PHP 网站看看这些功能,cmets 会帮助你。

以上是关于使用 GD2 将 png 转换为 jpg .. 透明度问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将 jp2 图像转换为 jpg 文件?

使用 PHP 将 PNG 转换为 JPG 并进行压缩?

ImageMagick 不会将 .png 转换为 .jpg

将mp3歌曲图像从png转换为jpg

将 .jpg 图像转换为 .png

怎样将jpg.转换成png.格式?