所以我想保存基於比例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