我目前正在使用canvas和Javascript进行图像处理。我正在使用fabric.js。我只是希望用户上传图像并将其与我们提供的模板合并。即,
我想仅在中心的空白圆圈中显示上传的图片,可以通过拖动来调整。
如何通过为用户提供易于使用的界面来解决这个问题?我尝试在fabric.js中使用 ClipTo 函数,但它不能用于图像对象。
答案 0 :(得分:5)
我认为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
,将图像绘制在蒙版图像上,然后从getImageData
和putImageData
绘制到目标画布上。
但如果Charles' answer适合你,那就更直截了当了。