使用Fabricjs在形状内绘制图像

时间:2011-12-03 11:24:27

标签: javascript html5-canvas fabricjs

我目前正在使用canvas和Javascript进行图像处理。我正在使用fabric.js。我只是希望用户上传图像并将其与我们提供的模板合并。即,

the Template

我想仅在中心的空白圆圈中显示上传的图片,可以通过拖动来调整。

  • 如果我将模板保留为上层,则用户无法拖动和调整,因为画布中充满了模板。
  • 如果我将上传的图片保留为上层,则图片会溢出圆圈。

如何通过为用户提供易于使用的界面来解决这个问题?我尝试在fabric.js中使用 ClipTo 函数,但它不能用于图像对象。

3 个答案:

答案 0 :(得分:5)

我认为overlayImage就是你所追求的。

customization demo为例:

Example of overlayImage

var canvas = new fabric.Canvas('c13');
var circle = new fabric.Circle({ 
  radius: 30, 
  fill: '#f55', 
  top: 100, 
  left: 100 
});
canvas.add(circle);
canvas.setOverlayImage('../assets/jail_cell_bars.png', 
  canvas.renderAll.bind(canvas));

答案 1 :(得分:1)

您可以将照片和模板都绘制到画布中。我不确定fabric.js,但如果你直接调用canvas函数,你就会......

ctx = canvas.getContext('2d');
ctx.DrawImage(user_img, x,y);
ctx.DragImage(template_imb, 0, 0);

当用户拖动鼠标更新x和y并重绘两个图层时。显然要确保模板中的孔是透明的。如果您希望用户能够调整图像大小,可以为DrawImage调用添加宽度和高度,只需提供某种控制即可更改它们。

答案 2 :(得分:0)

更难的方法是创建临时(屏幕外)画布。使用globalCompositeOperation=source-in,将图像绘制在蒙版图像上,然后从getImageDataputImageData绘制到目标画布上。​​

但如果Charles' answer适合你,那就更直截了当了。