$ im = ImageCreateFromString(file_get_contents($ source_file)); ImageFilter($ im,IMG_FILTER_GRAYSCALE);
任何想法我能做什么,正确的灰度GIF和pngs与transperancy?这个片段实际上运行良好,它将jpgs和pngs转换为灰度。然而,GIF有点“马车” - 它们并不总是有效,它取决于图像。有时会留下一些淡色。此外,此代码段不适用于Alpha通道。如果我用透明度转换gif或png,透明部分总会变黑。
当然我在查询图像类型并在“灰度化”之后,我会再次设置正确的类型。
你有什么想法吗?
答案 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 );