如何将图像从一个结构 canvas 复制到另一个大结构 canvas 的一部分?
How do I copy image from one fabric canvas to part of another big fabric canvas?
我想将多张 canvas 图像组合成一个巨型 canvas,其中所有这些来自不同织物 canvas 的单独图像排列在不同的位置。也就是说,我想把多个canvas拼接成一个megacanvas。有没有一种方法可以指定要从源 canvas 传输到目标 canvas 的图像数据,同时指定目标 canvas 中我想要传输的位置?
使用 toJSON()
序列化 canvases 中的所有对象。然后你可以使用 fabric.util.enlivenObjects 加载你的 mega canvas.
演示版
var canvas1 = new fabric.Canvas('c1');
var canvas2 = new fabric.Canvas('c2');
var canvas3 = new fabric.Canvas('c3');
canvas1.add(new fabric.Rect({
left: 10,
top: 10,
width: 50,
height: 50,
fill: '#4169e1'
}));
canvas2.add(new fabric.Rect({
left: 30,
top: 40,
width: 50,
height: 50,
fill: '#113232'
}));
function mergeToCanvas(){
var json1 = [],json2 = [];
canvas1.getObjects().map(function(x){
json1.push(x.toJSON());
});
canvas2.getObjects().map(function(x){
json2.push(x.toJSON());
});
canvas3.clear();
fabric.util.enlivenObjects(json1, function(objects) {
canvas3.add(...objects);
});
fabric.util.enlivenObjects(json2, function(objects) {
canvas3.add(...objects);
});
}
canvas {
border: 1px solid black;
}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c1" width="200" height="100"></canvas>
<canvas id="c2" width="200" height="100"></canvas>
<br>
<button onclick='mergeToCanvas()'>mergeToCanvas</button> <br>
<canvas id="c3" width="200" height="200"></canvas>
我想将多张 canvas 图像组合成一个巨型 canvas,其中所有这些来自不同织物 canvas 的单独图像排列在不同的位置。也就是说,我想把多个canvas拼接成一个megacanvas。有没有一种方法可以指定要从源 canvas 传输到目标 canvas 的图像数据,同时指定目标 canvas 中我想要传输的位置?
使用 toJSON()
序列化 canvases 中的所有对象。然后你可以使用 fabric.util.enlivenObjects 加载你的 mega canvas.
演示版
var canvas1 = new fabric.Canvas('c1');
var canvas2 = new fabric.Canvas('c2');
var canvas3 = new fabric.Canvas('c3');
canvas1.add(new fabric.Rect({
left: 10,
top: 10,
width: 50,
height: 50,
fill: '#4169e1'
}));
canvas2.add(new fabric.Rect({
left: 30,
top: 40,
width: 50,
height: 50,
fill: '#113232'
}));
function mergeToCanvas(){
var json1 = [],json2 = [];
canvas1.getObjects().map(function(x){
json1.push(x.toJSON());
});
canvas2.getObjects().map(function(x){
json2.push(x.toJSON());
});
canvas3.clear();
fabric.util.enlivenObjects(json1, function(objects) {
canvas3.add(...objects);
});
fabric.util.enlivenObjects(json2, function(objects) {
canvas3.add(...objects);
});
}
canvas {
border: 1px solid black;
}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c1" width="200" height="100"></canvas>
<canvas id="c2" width="200" height="100"></canvas>
<br>
<button onclick='mergeToCanvas()'>mergeToCanvas</button> <br>
<canvas id="c3" width="200" height="200"></canvas>