javascript - html5 Canvas 中的套索工具

标签 javascript html fabricjs freeform

我正在尝试构建一个自由套索工具来在 Canvas 内剪裁图像。我正在使用 fabric.js绘制形状。

var canvas = document.getElementById('c');
var ctx = canvas.getContext('2d');
var img = document.createElement('IMG');

img.onload = function() {
  var OwnCanv = new fabric.Canvas('c', {
    isDrawingMode: true
  });

  OwnCanv.freeDrawingBrush.color = "purple"
  OwnCanv.freeDrawingBrush.width = 4

  ctx.clip();

  ctx.drawImage(img, 0, 0);
}

img.src = "http://upload.wikimedia.org/wikipedia/commons/3/33/Jbassette4.jpg?uselang=fi";
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js"></script>

<canvas id="c" width="500" height="500"></canvas>

这是我的尝试,但似乎不起作用,我在这里做错了什么?

谁能帮帮我?非常感谢。

最佳答案

图像需要是 fabric.Image

你可以尝试这样的事情:

var canvas = document.getElementById('c');
var ctx = canvas.getContext('2d');
var img = document.createElement('IMG');

img.onload = function() {
    var OwnCanv = new fabric.Canvas('c', {
        isDrawingMode: true
    });

    var imgInstance = new fabric.Image(img, {
        left: 0,
        top: 0,
    });
    OwnCanv.add(imgInstance);

    OwnCanv.freeDrawingBrush.color = "purple"
    OwnCanv.freeDrawingBrush.width = 4

    OwnCanv.on('path:created', function(options) {
        var path = options.path;
        OwnCanv.isDrawingMode = false;
        OwnCanv.remove(imgInstance);
        OwnCanv.remove(path);
        OwnCanv.clipTo = function(ctx) {
            path.render(ctx);
        };
        OwnCanv.add(imgInstance);
    });
}

img.src = "http://upload.wikimedia.org/wikipedia/commons/3/33/Jbassette4.jpg?uselang=fi";
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js"></script>

<canvas id="c" width="500" height="500"></canvas>

有关更多信息,请参阅这些资源:

http://fabricjs.com/fabric-intro-part-1/

Multiple clipping areas on Fabric.js canvas

Fabric.js Clip Canvas (or object group) To Polygon

关于javascript - html5 Canvas 中的套索工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366490/

相关文章:

html - 如何正确预加载 CSS 样式表?

html - 如何在CSS中使3列宽度具有不同尺寸的流体

HTML根目录?

javascript - 如何在不选择她的情况下删除 Canvas 中绘制的线条

javascript - Google Charts,如何在 ChartWrapper 中设置计算 View ?

javascript - 未捕获的类型错误 : Cannot call method 'terminate' of null (web worker)

javascript - 使用 fabric.js 在按钮单击时在 Canvas 上添加图像

javascript - 编辑文本 Fabricjs - IText 格式字母和同时选择 textDecoration

javascript - 在js中查找数组中重复项的索引

javascript - video.js - 单击链接时更新视频源