2010-01-29 33 views
1

$ im = ImageCreateFromString(file_get_contents($ source_file)); ImageFilter($ im,IMG_FILTER_GRAYSCALE);PHP:灰度jpgs,gifs,pngs ...还有alpha通道?

任何想法我能做些什么,以正确的灰度GIF和PNG与transperancy?这段代码实际上效果不错,它将jpgs和png转换为灰度。然而GIF有点“越野车” - 它们并不总是有效,它取决于图像。有时还会留下一些苍白的颜色。此外,这段代码不适用于alpha通道。如果我将透明度转换成gif或png,透明部分总是会变黑。

当然,即时查询图像类型和“灰度”后,我会再次设置适当的类型。

你有什么想法吗?

回答

3

此代码应保留阿尔法,但它比ImageFilter的慢:

$im = ImageCreateFromString(file_get_contents($source_file)); 

$width=imagesx(); 
$height=imagesy(); 
for($x=0;$x<$width;$x++) 
for($y=0;$y<$height;$y++) 
{ 
    $rgb=imagecolorsforindex($im,imagecolorat($im,$x,$y)); 
    $average=ceil(($rgb["red"]+$rgb["green"]+$rgb["blue"])/3); 
    imagesetpixel($im,$x,$y,imagecolorallocatealpha($im,$average,$average,$average,$rgb['alpha'])); 
} 

如果仍有问题,请尝试将图像生成后写这个(在$宽度= ..前):

imagesavealpha($im,true); 
+0

谢谢!没有imagesavealpha什么都没有改变。如果我设置它,只有png的alpha通道起作用。 Gif透明度仍然变黑。此外,一些GIF和PNG不会得到适当的灰度。任何更多的想法。 – matt 2010-01-29 17:30:19

2

对于PNG图像简单地调用imagesavealpha()解决了上α通道的黑色像素的问题,完整的代码:

$im = ImageCreateFromString(file_get_contents($source))  
imagefilter($im, IMG_FILTER_GRAYSCALE); 
imagesavealpha($im,true); 
imagepng($im, $output); 
+0

这适合我!由于我的代码中存在错误,它之前没有。谢谢! – 2016-05-22 15:20:52

相关问题