折线自动关闭 - 如何绘制开放折线?

时间:2012-03-29 10:46:00

标签: php gd imagick polyline

我需要在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中有解决方案,我也很高兴。不,我不能简单地将各个线串在一起,因为我想要线条的厚度。

3 个答案:

答案 0 :(得分: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);

然后

$draw->polyline($line);

你会得到你想要的东西。

答案 1 :(得分:0)

查看GD折线的文档。也许你想要的是:http://bonzoli.com/sourcecode/index.php/man/GD::Polyline

答案 2 :(得分:0)

您应该定义笔触和填充颜色,否则Imagick会"填充"由线条限定的区域以及填充颜色的起点和终点。这些值的默认值为" white"和"黑"。

此代码将按预期工作,即它生成镜像" 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");