Как скопировать изображение с одного тканевого холста на часть другого большого тканевого холста?

Я хочу объединить несколько изображений холста в мега-холст, в котором все эти отдельные изображения с разных тканевых полотен расположены в разных положениях. Другими словами, я хочу сшить несколько холстов в один мега холст. Есть ли способ, где я могу указать данные изображения для передачи с исходного холста на целевой холст, также указав, где на целевом холсте я хочу это перенести?

1 ответ

Решение

Сериализация всего объекта с холстов с использованием toJSON(), Затем вы можете использовать fabric.util.enlivenObjects для загрузки в ваш мега холст.

DEMO

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>

Другие вопросы по тегам