2010-11-16 78 views
2

我使用GD来绘制阵列点数据中的一些简单图表。试图优化外观 - 即使使用imageantialias,点之间的线中仍然存在明显可见的锯齿。什么是更好的方式来PHP的两个点之间的一条线GD抗锯齿?PHP GD更强更强Antialias

回答

0

它看起来最简单的解决方案是解压缩JPGraph(http://jpgraph.net),并使用图表类 - 线出来惊人的反锯齿,我敢说,很漂亮!

(ImageMagick的是一种痛苦设立在CentOS服务器 - 吹起来,减少上面的方法似乎并没有提高抗锯齿..)

0

GD和许多尴尬的解决方法有很多限制。我建议使用ImageMagick代替以获得更好的绘图工具。

0

如何应用imagefilterIMG_FILTER_GAUSSIAN_BLUR,IMG_FILTER_SELECTIVE_BLURIMG_FILTER_SMOOTH就行了?

+0

如何将它应用在线上?将其应用于图像资源只会使其看起来模糊不清,但锯齿仍然很明显... – ina 2010-11-16 07:12:41

+0

在可以叠加在背景图像上的单独透明图像上创建线条 – stillstanding 2010-11-16 07:20:33

+0

原始图像只有一行 - 应用模糊/平滑的过滤器只是模糊了线条,但仍然存在问题http://ina-zntvj.posterous.com/php-gd-jaggedness – ina 2010-11-16 07:37:01

0

可能是这样的情况,您的行正确antialiased,但您还需要伽马校正图像。我不知道GD是否对你来说很容易,但是我已经在自己的渲染代码中看到了这种效果,并且适当的gamma值取决于你使用的显示器。

+0

对于我的测试图,它是白色的bg,黑色的线...... – ina 2010-11-16 07:04:52

+0

即使有黑白图像,您仍可能需要伽马校正它。基本上,代码会将值127放到像素阵列中,希望获得中等灰度的阴影,但是您的显示器会将其更接近白色或黑色,并且会消除抗锯齿效果。 – xscott 2010-11-16 07:07:06

+0

我不是一个PHP的家伙,但它看起来像“布尔imagegammacorrect(资源$图像,浮动$ inputgamma,浮动$ outputgamma)”可能会有所帮助。 – xscott 2010-11-16 07:09:10

0

对不起,看来我downvoted你(或我改变了这一切?看来我现在评论家徽章)

我使用了一些黑客,它看起来没有那么糟糕

http://i42.tinypic.com/72tzes.jpg

http://i42.tinypic.com/290yidi.png

我在主线后面画了几条线,颜色较少

$arColor = imagecolorsforindex($im, $color); 
$AAcolor = imagecolorallocatealpha($im, $arColor['red'], $arColor['green'], $arColor['blue'], 112); 

imageline($im,round($prevX+1),round($prevY),round($x),round($y+1),$AAcolor); 
imageline($im,round($prevX),round($prevY-1),round($x+1),round($y),$AAcolor); 
imageline($im,round($prevX-1),round($prevY),round($x),round($y-1),$AAcolor); 
imageline($im,round($prevX),round($prevY+1),round($x-1),round($y),$AAcolor); 
imageline($im,round($prevX),round($prevY),round($x),round($y),$color);