2011-09-30 95 views
6

我有很多JPEG图像,我想使用PHP将其转换为PNG图像。 JPEG将由客户端上传,所以我不能相信他们确保它们的格式正确。使用PHP将JPEG转换为透明PNG

我也想让他们的白色背景透明。

PHP有什么功能可以用来实现这个功能吗?

回答

8

后尝试不同的解决方案,并做一些更多的研究, 几天这就是我发现我工作。

$image = imagecreatefromjpeg('image.jpg'); 
imagealphablending($image, true); 
$transparentcolour = imagecolorallocate($image, 255,255,255); 
imagecolortransparent($image, $transparentcolour) 

imagealphablending($image, true);很重要。

使用imagesavealpha($f, true);在前面的回答中提到的肯定行不通,似乎确实防止您的背景透明...

为了输出正确的标题透明图像。

<?php 
    header('Content-Type: image/png'); 
    imagepng($image, null, 1); 
?> 
6
$f = imagecreatefromjpeg('path.jpg'); 
$white = imagecolorallocate($f, 255,255,255); 
imagecolortransparent($f, $white); 

更多细节here

+6

假设这会工作,记住,JPG是一种有损格式。这意味着颜色可能稍微偏离一点,特别是在边缘以及颜色从白色变为另一种颜色的地方。寻找简单的白色可能无法找到所有想要透明的像素。 – GolezTrol

+1

只是为了完成这个答案:使用'imagesavealpha($ f,true);'确保alpha通道被保存并且'imagepng($ f,'/path/to/save/file.png');'保存为PNG。 – megaflop

+0

更多详情[here](http://www.php.net/manual/en/ref.image.php)。 – awm

-3

我发现这个解决方案在Convert jpg image to gif, png & bmp format using PHP

$imageObject = imagecreatefromjpeg($imageFile); 
imagegif($imageObject, $imageFile . '.gif'); 
imagepng($imageObject, $imageFile . '.png'); 
imagewbmp($imageObject, $imageFile . '.bmp'); 
+0

你还没有回答透明度问题。 – megaflop

0

这为我工作:

$image = imagecreatefromjpeg("image.jpg"); 
imagealphablending($image, true); 
imagepng($image, "image.png");