2012-03-29 71 views
1

我需要在PHP中繪製連續的線條。 GD顯然無法做到,但imagick具有折線功能。現在我的測試代碼:折線自動關閉 - 如何繪製開放多段線?

$image = new Imagick(); 
$image->newImage(100, 100, new ImagickPixel('white')); 
$draw = new ImagickDraw(); 
$draw->setStrokeWidth(3); 
$line = array(
    array('x'=>10, 'y'=>10), 
    array('x'=>50, 'y'=>10), 
    array('x'=>70, 'y'=>40), 
    array('x'=>30, 'y'=>60), 
); 
$draw->polyline($line); 
$image->drawImage($draw); 
$image->setImageFormat('jpg'); 
$image->writeImage("test.jpg"); 

由於我無法理解的原因而產生CLOSED(和填充)多邊形。這裏發生了什麼,如何解決?我希望它停止在最後一點,而不是關閉或填充。

如果GD有解決方案,我也很高興。不,我不能簡單地將單獨的線條串起來,因爲我需要線條的粗細。

回答

1

有可能通過在一個方向上拉伸,然後用相同的積分榜,沒有第一和最後一個點後面(它們不是neccessary)

所以得出一個開放的折線,如果你有

$line = array(
    array('x'=>10, 'y'=>10), 
    array('x'=>50, 'y'=>10), 
    array('x'=>70, 'y'=>40), 
    array('x'=>30, 'y'=>60), 
); 

你應該添加

$line[] = array('x'=>70, 'y'=>40); 
$line[] = array('x'=>50, 'y'=>10); 

然後

$draw->polyline($line); 

你會得到你想要的。

+0

這就是聰明的傢伙.. +1 – 2013-05-23 16:03:29

0

您應該定義筆畫顏色和填充顏色,否則Imagick將用填充顏色「填充」線所包圍的區域以及起點和終點。這些值的默認值是「白色」和「黑色」。

此代碼將工作打算,即,它產生一個鏡像「C」形的對象與3個像素寬度的黑線:

$image = new Imagick(); 
$image->newImage(100, 100, 'white'); 
$draw = new ImagickDraw(); 
$draw->setStrokeWidth(3); 
$draw->setStrokeColor ("black"); 
$draw->setFillColor ("none"); 
$line = array(
    array('x'=>10, 'y'=>10), 
    array('x'=>50, 'y'=>10), 
    array('x'=>70, 'y'=>40), 
    array('x'=>30, 'y'=>60), 
); 
$draw->polyline($line); 
$image->drawImage($draw); 
$image->writeImage("test.jpg");