缩放fabric js canvas及其所有对象

时间:2017-06-12 13:56:20

标签: javascript html5 fabricjs

我正在使用一个函数来扩展整个fabric.js画布,这个函数的值百分比如zoomCanvas(2.2);其中2.2表示220%而不是百分比我需要按像素缩放画布以适合容器中的画布,例如当从json数据加载画布时,其初始大小为1200px x 700px,容器大小为500px。现在我需要找到一种方法,可以将此500px转换为百分比值,以便整个画布及其所有对象适合500px。

这是缩放功能,其中因子是百分比值

   function zoomCanvas(factor) {
canvas.setHeight(canvas.getHeight() * factor);
canvas.setWidth(canvas.getWidth() * factor);
if (canvas.backgroundImage) {
    // Need to scale background images as well
    var bi = canvas.backgroundImage;
    bi.width = bi.width * factor; bi.height = bi.height * factor;
}
var objects = canvas.getObjects();



var tcounter = 0;

for (var i in objects) {

    tcounter++;


    //alert(tcounter);
    var scaleX = objects[i].scaleX;
    var scaleY = objects[i].scaleY;
    var left = objects[i].left;
    var top = objects[i].top;

    var tempScaleX = scaleX * factor;
    var tempScaleY = scaleY * factor;
    var tempLeft = left * factor;
    var tempTop = top * factor;

    objects[i].scaleX = tempScaleX;
    objects[i].scaleY = tempScaleY;
    objects[i].left = tempLeft;
    objects[i].top = tempTop;

    objects[i].setCoords();
}
canvas.renderAll();
canvas.calcOffset();
}

2 个答案:

答案 0 :(得分:2)

你应该有一个带有一些尺寸的原始画布。从那个画布你应该找到你的factorX和factorY值。例如,您的原始画布为1280x1020像素,您需要转换为尺寸500x500px。

var factorX = 500 / 1280;
var factorY = 500 / 1020;

然后,从

修改你的功能
function zoomCanvas(factor) {...}

function zoomCanvas(factorX, factorY) {...}

使用factorX表示宽度值,使用factorY表示高度值。

答案 1 :(得分:1)

您需要的比例因子是:

scaleRatio = Math.min(containerWidth/canvasWidth, containerHeight/canvasHeight);

要缩放画布,您应该使用:

canvas.setDimensions({ width: canvas.getWidth() * scaleRatio, height: canvas.getHeight() * scaleRatio });

然后

canvas.setZoom(scaleRatio)

不需要自定义缩放功能