将自由绘制路径的轮廓转换为多边形

时间:2021-05-05 17:20:51

标签: javascript svg html5-canvas fabricjs polygon

我想使用 fabric.js javascript 库分割图像中的多个对象。

在这个例子中,我想分割冲浪板。然后我想将绘制的形状转换为多边形,其外部区域的坐标与图像的像素坐标相对应。

使用fabric.js 内置的免费绘图画笔绘制分割本身非常简单。

enter image description here

然后我可以使用这段代码将绘制路径的坐标转换为多边形:

canvas.on('path:created', function(el){
    var path = el.path.path
  var points = []
  for (var i = 0; i < path.length; i++){
    point = {
      x: Math.round(path[i][1]),
      y: Math.round(path[i][2])
    }
    points.push(point)
  }

  shape = new fabric.Polygon(points, {
      stroke: 'red',
      opacity: 0.5,
      strokeWidth: 1,
      description: 'aaa',
      fill: 'transparent',
  });
  canvas.add(shape)
})

红色/黑色链接是我使用鼠标绘制的方式。

enter image description here

关闭绘图模式并将它们拖走后,2个创建的对象(绘图路径和多边形)如下所示。

enter image description here

但是,由于画笔有一定的宽度,并且由于路径区域重叠,我将其转换为多边形的方法效果不佳。

所以我不想要我输出的当前多边形(红色的),而是绿色部分的轮廓。我怎样才能做到这一点?

工作小提琴:https://jsfiddle.net/haw54v9L/3/

0 个答案:

没有答案