Fabric.js如何按图像剪辑

Posted

技术标签:

【中文标题】Fabric.js如何按图像剪辑【英文标题】:Fabric.js how to clip by image 【发布时间】:2016-05-27 23:17:02 【问题描述】:

标题说明了一切。你可以看到Fabric.js Mask Filter Demo。这应该很简单,但我找不到任何将掩码应用于 Fabric.js 的示例。

我正在尝试将掩码应用于我的 JSFiddle。 http://jsfiddle.net/ZxYCP/342/

在我的 JSFiddle 中,我的目标是将 logopugImg 夹在 this picture 内(或者任何你想要的图片)。好吧,反正我连一张图片都遮不住,所以如果这不打扰你,请更新 JSFiddle 以获得更好的解释。

此外,Fabric.js in this question 的创建者 @kangax 的代码应该是解决方案,但我无法工作。结果应该如下图所示。任何进一步的建议表示赞赏。

【问题讨论】:

【参考方案1】:

您并没有真正尝试掩盖图像。您正在使用一些合成效果。 有几件事与 fabric.js 没有直接关系。

蒙版覆盖图像。

您发布的演示链接不会让您获得屏幕截图中的效果。

如果是这种情况,您应该:

浅蓝色画布

pug.jpg 图片

一个白色的overlay image,里面有一个女孩形的透明洞

用那 3 个做三明治。 在这种情况下,您是 masking 画布而不是图像。

如果你有一个女孩形的路径,你可以剪裁画布,如下所示:

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

但是你声明你想使用图片来代替。 所以如果你没有女孩形孔的覆盖,你可以使用另一种解决方案来获得相同的效果:

透明画布

具有您需要的形状和周围透明像素的浅蓝色图像

pug.jpg 图片

在画布上添加第一张图片; 将 pug.jpg 的 globalCompositeOperation 设置为 'source-atop' 在另一个图像上绘制另一个图像

var canvas = new fabric.Canvas('c');

fabric.Image.fromURL('http://fabricjs.com/assets/2.svg', function(img)
  img1 = img;
  fabric.Image.fromURL('http://fabricjs.com/assets/pug.jpg', function(img)
    img1.scaleToWidth(canvas.getWidth());
    img2 = img;
    img2.scaleToHeight(300);
    img2.left = 50;
    img2.top = 50;
    img2.globalCompositeOperation = 'source-atop';
    canvas.add(img1);
    canvas.add(img2);
  );
);
<script type ="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script>
<canvas id="c"   style="border:1px solid #ccc"></canvas>

【讨论】:

我们如何为文本对象做这件事,就像文本一样。住在里面的形状

以上是关于Fabric.js如何按图像剪辑的主要内容,如果未能解决你的问题,请参考以下文章

如何检测fabric js动画对象上的鼠标按下事件

Fabric.js 将画布(或对象组)剪辑到多边形

Html5 Canvas + fabric.js 的独立堆肥

Fabric.js 画布上的多个剪切区域

如何使用 Fabric.js 将图像上传到画布?

如何在 Fabric.js 中缩放图像以忽略纵横比?