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