PHP:灰度jpgs,gifs,pngs ......还有alpha通道?

时间:2010-01-29 15:52:22

标签: php image png jpeg gif

$ im = ImageCreateFromString(file_get_contents($ source_file));     ImageFilter($ im,IMG_FILTER_GRAYSCALE);

任何想法我能做什么,正确的灰度GIF和pngs与transperancy?这个片段实际上运行良好,它将jpgs和pngs转换为灰度。然而,GIF有点“马车” - 它们并不总是有效,它取决于图像。有时会留下一些淡色。此外,此代码段不适用于Alpha通道。如果我用透明度转换gif或png,透明部分总会变黑。

当然我在查询图像类型并在“灰度化”之后,我会再次设置正确的类型。

你有什么想法吗?

2 个答案:

答案 0 :(得分:3)

此代码应保留alpha,但速度比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']));
 }

如果仍有问题,请尝试在创建图像后(在$ width = ..之前)写入:

imagesavealpha($im,true);

答案 1 :(得分:2)

对于pngs,只需调用imagesavealpha()即可解决alpha通道上黑色像素的问题,完整代码:

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