FabricJS:使用画布上的对象控件来调整大小,但不是缩放

时间:2015-08-07 20:03:59

标签: javascript canvas fabricjs

问题是在画布上使用可视控件时更新实际的object.width, object.height并保留object.scaleX = 1object.scaleY = 1

问题的根源是在使用控件操作对象时,fabric.js会更改对象的比例,以及缩放路径的笔划,我希望它始终具有相同的宽度。

所以我想让它更像Adobe Illustrator,而不是缩放笔画的宽度以及rectalngular的宽度,例如。

2 个答案:

答案 0 :(得分:9)

我找到了一个以不同方式提出的问题的解决方案:

Rect with stroke, the stroke line is mis-transformed when scaled

我们的想法是使用新的比例因子计算新的可能宽度和高度,设置新尺寸并将比例因子重置为1.

以下是该答案的代码示例:

el.on({
'scaling': function(e) {
    var obj = this,
        w = obj.width * obj.scaleX,
        h = obj.height * obj.scaleY,
        s = obj.strokeWidth;

    obj.set({
        'height'     : h,
        'width'      : w,
        'scaleX'     : 1,
        'scaleY'     : 1
    });
}
});

答案 1 :(得分:3)

从Fabric.js 2.7.0版开始,您可以在对象上启用systemctl restart httpd.service属性,该属性将始终与为笔划宽度输入的确切像素大小匹配。

strokeUniform

http://fabricjs.com/stroke-uniform