2012-03-29 11 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"); 

は、私が推測することができない理由で閉じたポリゴンを生成します。ここでは何が起こっているのですか?どうすれば修正できますか?私は最後の点で停止し、閉じたり塗りつぶしたりしないようにします。

GDの解決策がある場合は、私も満足しています。いいえ、私は単に線を太くしたいので、個々の線をまとめてストリングすることはできません。

答えて

1

当時、最初と最後のポイントなしの同じポイントテーブル、と(彼らは必要ありませんです)

ので、一つの方向に描くとすることにより、オープンポリラインを描画することができます、あなたは

$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); 

を追加する必要があります210
$draw->polyline($line); 

あなたが望むものを手に入れることができます。

+0

それはスマートな男です.. +1 –

0

ストロークと塗りつぶしの両方の色を定義する必要があります。そうしないと、線で囲まれた領域と開始点と終了点が塗りつぶし色で塗りつぶされます。これらの値のデフォルトは "白"と "黒"です。

意図したとおり、このコードは、それが3つのピクセル幅の黒線でミラーリング「C」形状のオブジェクトを生成する、すなわち、動作します。

$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"); 
関連する問題