2015-06-27 35 views
1

所以我试图在今天与Imagick画一条线。听起来很简单吧?用ImagickDraw绘制单像素线时出现奇怪的阴影/模糊

这里是我的代码:

$image = new Imagick(); 
$image->newImage(100, 100, 'white'); 
$image->setImageFormat('png'); 

$line_color = new ImagickPixel('#555555'); 
$line_weight = 1; 

$line = new ImagickDraw(); 

$line->setResolution(100, 100); 
$line->setStrokeWidth($line_weight); 
$line->setStrokeColor($line_color); 

$line->line(20, 20, 20, 60); 

$image->drawImage($line); 
$image->writeImage('test.png'); 

没什么好惊讶,我创建了一个100x100的黑白图像,我在1在555555设置线颜色,线宽,创建我ImagickDraw对象,并告诉他画一条线。

的问题是,输出看起来像这样:http://i.stack.imgur.com/hM8QS.png

这看起来不错,在第一,直到你放大和看到这一点:http://i.stack.imgur.com/O6Yie.png

我试了几种设置的颜色,重量和分辨率,但我无法摆脱这种奇怪的阴影/模糊效果。它与我绘制的几乎任何东西(线,矩形等...)除了点。所以如果我想要的话,我可以用一系列点和一个简单的for循环创建我的单像素线,但它确实会很繁琐。特别是因为我不会画这条线。

那么,任何人都知道发生了什么?我怎样才能摆脱这种行为?

回答

0

您看到的效果是由于启用了笔画反锯齿功能。您可以使用setStrokeAntialias来禁用它。

$line->setResolution(100, 100); 
$line->setStrokeWidth($line_weight); 
$line->setStrokeColor($line_color); 
$line->setStrokeAntialias(false); 

重新启用描边反锯齿,同时绘制曲线以避免锯齿伪影。

不幸的是,在我的测试中,当笔画颜色设置为代码示例中的#555555(或等效表示形式)时,会导致线条完全消失。但是,将颜色设置为#545454或#565656会导致线条正确绘制,而不会出现所描述的阴影/模糊效果。

+0

谢谢你的作品!我认为antialias默认是关闭的,所以我之前测试的时候只是删除了setStrokeAntialias语句而不是实际上把它设置为false。我现在和#555555颜色有同样的错误,但它并不重要。 – TheAthenA714