Html5 Canvas + fabric.js 的独立堆肥

Posted

技术标签:

【中文标题】Html5 Canvas + fabric.js 的独立堆肥【英文标题】:Independed Compositing at Html5 Canvas + fabric.js 【发布时间】:2011-11-10 12:40:18 【问题描述】:

我需要用画布做如下图所示的事情。

用户将图像拖放到黄色边框的正方形上,而不是更改图像的大小位置。图像将被剪裁在黄色边框内。我想使用剪裁但是,当使用全局剪裁时。图像在其他部分运行。我该怎么办?我希望它们表现得像独立的剪辑区域。

【问题讨论】:

查看我的 answer 到 Multiple Clipping Areas on fabric js canvas 以获取使用 Fabric.js 执行此操作的示例 【参考方案1】:

也许下一个代码示例可以帮助你:

html

<canvas id='test' width='400px' height='400px' style='background-color:orange;'>
</canvas>

脚本:

var imgRes=
    ['http://www.planethopia.info/wp-content/uploads/2010/02/space3.jpg',
     'http://www.star.ac.za/graphics/n11lmc_noao.jpg',
     'http://images.wikia.com/memoryalpha/en/images/5/54/Deep_space_9.jpg'];

var images=[new Image(),new Image(),new Image()];
for(var i=0;i<3;i++) 
    images[i].src=imgRes[i];


var ctx=document.getElementById("test").getContext("2d");

// image[0]
ctx.save();
ctx.beginPath();
ctx.rect(5,5,190,190);
ctx.closePath();
ctx.clip();
ctx.drawImage(images[0],0,0);
ctx.restore();

// image[1]
ctx.save();
ctx.beginPath();
ctx.rect(5,205,190,190);
ctx.closePath();
ctx.clip();
ctx.drawImage(images[1],0,0);
ctx.restore();

// image[2]
ctx.save();
ctx.beginPath();
ctx.rect(205,5,190,390);
ctx.closePath();
ctx.clip();
ctx.drawImage(images[2],0,0);
ctx.restore();

http://jsfiddle.net/MsSzz/

更新:http://jsfiddle.net/MsSzz/1/

【讨论】:

哇,太好了,感谢您的回复。我了解您在执行每个剪辑操作之前都在保存状态。但是,我认为用这种方法移动或调整图像大小是不可能的? 没有。在上面的示例中,我只是在画布的 point(0,0) 处绘制图像。但是您可以移动、调整大小、转换图像、线条、文本。保存和恢复适用于上下文。如果您在调用.save 后在.cliptransformtranslatescalerotate 的帮助下更改上下文,您可以通过简单地调用.restore 来恢复先前的上下文状态.在 MDN 中阅读:developer.mozilla.org/en/Canvas_tutorial/Transformations 您必须记住,您的 cliptransform... 不适用于图像、文本、线条...,而是用于上下文。 @Mirat Can Bayrak - 请参阅答案中的更新链接。

以上是关于Html5 Canvas + fabric.js 的独立堆肥的主要内容,如果未能解决你的问题,请参考以下文章

Fabric.js 合并多个 Canvas JSON(或)SVG

在fabric.js中将Canvas下载为PNG,给出网络错误

将图像从计算机上传到 Fabric.JS Canvas

从 JSON 加载不起作用。 Fabric.JS

没有jQuery,图片上传在Canvas中不起作用?

Fabric.js 文本字段 - Android 问题