2015-06-27 128 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