使用 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 .. 透明度问题的主要内容,如果未能解决你的问题,请参考以下文章