【问题标题】:Getting objects from a rectangular area with fabric.js and draw the area to a canvas使用fabric.js从矩形区域获取对象并将该区域绘制到画布上
【发布时间】:2015-04-10 03:23:03
【问题描述】:

如何从特定的矩形区域获取 fabric.js 对象(与选择框的行为相同,但手动)然后将对象的“选定”像素区域绘制到标准画布上?

注意:在我的情况下,直接获取像素数据是不可能的,因为画布用作视口,并且对象可以在视口之外(即:平移)。

【问题讨论】:

    标签: javascript html canvas fabricjs


    【解决方案1】:

    通过查看函数 _collectObjects 解决了这个问题,并使用函数 drawObjsTo 扩展了 fabric.js,该函数从矩形中收集对象并将它们呈现在传递为的画布上下文中论点,解决方案有点脏,但它可以解决我在fabric.js画布上使用简单的getImageData遇到的另一个问题,结果数据包括选择框,因此该函数也可用于获取对象的像素数据仅限。

    fabric.Canvas.prototype.drawObjsTo = function (ctx, x1, y1, x2, y2) {
        var currentObject,
            selectionX1Y1 = new fabric.Point(Math.min(x1, x2), Math.min(y1, y2)),
            selectionX2Y2 = new fabric.Point(Math.max(x1, x2), Math.max(y1, y2));
    
        for (var i = this._objects.length; i--; ) {
            currentObject = this._objects[i];
    
            if (!currentObject || !currentObject.visible) {
                continue;
            }
    
            if (currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2) ||
                currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2) ||
                currentObject.containsPoint(selectionX1Y1) ||
                currentObject.containsPoint(selectionX2Y2)
            ) {
                currentObject.render(ctx);
            }
        }
    };
    

    也许应该有一种方法可以在 fabric.js 中原生地做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-02
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      相关资源
      最近更新 更多