我有一个带有白色背景的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
答案 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;
}