所以我想保存基于比例1的画布,我想包括所有现有的/可见的对象。Fabricjs - 如何检测对象存在的画布的总宽度/高度
所以现在,我的画布是600x400,如果我要保存它,它只会保存600x400内部的内容,并且它尊重缩放级别(较高的缩放将会看到较少的东西,较低的缩放会看到更多的东西但更小)。
我解决此得到通过运行此代码:
let zoom = this.canvas.getZoom();
this.canvas.setZoom(1);
let url = this.canvas.toDataURL({width: 1000, height: 700, multiplier: 1});
this.canvas.setZoom(zoom);
window.open(
url,
'_blank' // <- This is what makes it open in a new window.
);
这样做是将图像保存为1000x700,这样的东西,是过去600像素,但1000下仍然得到保存。
但是,这是硬编码。所以我想知道是否有一个现有的函数或干净/简单的方法来检测所有对象在哪里,并返回完整大小(宽度和高度)。
小提琴:http://jsfiddle.net/1pxceaLj/3/
更新1:
var gr = new this.fabric.Group([], {
left: 0,
top: 0
});
this.canvas.forEachObject((o) => {
gr.add(o);
});
this.canvas.add(gr);
this.canvas.renderAll();
console.log(gr.height, gr.width); // 0 0
解决方案
使用组是最好的办法。最好的例子:http://jsfiddle.net/softvar/mRA8Z/
function selectAllCanvasObjects(){
var objs = canvas.getObjects().map(function(o) {
return o.set('active', true);
});
var group = new fabric.Group(objs, {
originX: 'center',
originY: 'center'
});
canvas._activeObject = null;
canvas.setActiveGroup(group.setCoords()).renderAll();
console.log(canvas.getActiveGroup().height);
}
我的对象将已经存在的。我试图将它们添加到gr后,然后添加gr,但它使我的宽度/高度为零。有任何想法吗?将张贴我所做的。但是组里有物体 –
@ A.Lau老实说,我不太了解这些材料。也许'addWithUpdate'是你在找什么?看到这里:https://stackoverflow.com/questions/33751273/how-to-add-objects-in-group-dynamically-in-fabric-js – Dominik
@ A.Lau刚刚检查它,尝试AddWithUpdate :) – Dominik