使用fabric.js修改画布而不删除现有内容

时间:2015-01-21 09:02:28

标签: javascript html5 canvas fabricjs

在我的网页中有一个包含一些内容的画布,这些内容是单独呈现的(不使用fabric.js)。

我想要做的是使用fabric.js在现有内容之上添加一些内容。 我试着这样做(示例代码),

var canvas = new fabric.Canvas('c');
var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z');
path.set({ left: 120, top: 120 });
canvas.add(path);

但它会从画布中删除现有内容。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:4)

使用jason Maggard建议的canvas.toDataURL()函数:

var c = document.getElementById('c');
var ctx = c.getContext("2d");
ctx.fillStyle = "#FF0000";
ctx.fillRect(0,0,c.width,c.height);

var bg = c.toDataURL("image/png");

var canvas = new fabric.Canvas('c');
canvas.setBackgroundImage(bg,canvas.renderAll.bind(canvas));
var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z');
path.set({ left: 120, top: 120 });
canvas.add(path);

即使添加了fabricjs代码,红色背景仍应存在。您还可以使用canvas.toDataURL()函数作为动态图像的src,如果您希望能够在/等处移动它。

var c = document.getElementById('c');
var ctx = c.getContext("2d");
ctx.fillStyle = "#FF0000";
ctx.fillRect(0,0,c.width,c.height);

var img = new Image();
img.src = c.toDataURL("image/png");

var canvas = new fabric.Canvas('c');
var oldCanvas = new fabric.Image(img,{ width: c.width, height: c.height });

var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z');
path.set({ left: 120, top: 120 });

canvas.add(oldCanvas);
canvas.add(path);