如何在画布上调整文本大小

时间:2017-02-15 13:33:22

标签: html5-canvas fabricjs

我找到了一种方法,可以使用以下代码在普通的HTML5 Canvas上调整和压缩我的文本:

$("input").on("input", function() {
ctx.clearRect(0, 0, 400, 400);
var width = ctx.measureText(text).width;
if(width <= 100) {
    ctx.fillText(text, 0, 100);
} else {
    ctx.save();
    ctx.scale(100 / width, 1);
    ctx.fillText(text, 0, 100);
    ctx.restore();
}

});

我想做同样的事情,但使用FabricJS。我有办法做到吗?

1 个答案:

答案 0 :(得分:0)

是的,请确保在创建文本元素之后检查文本元素的宽度,并在将其添加到画布之前根据需要设置ScaleX属性:

    var canvas = new fabric.Canvas('c');
    var t;

    canvas.renderAll();

    $("input").on("input", function () {
        if (t) {
            canvas.remove(t);
        }
        var textToDraw = $(this).val();
        t = new fabric.Text(textToDraw, {
            left: 0,
            top: 0
        });
        if (t.width > c.width) {
            console.log('scale -> ' + (c.width / t.width));
            t.setScaleX(c.width / t.width);
        }
        canvas.add(t);
    });

如果您希望在对象大小调整上执行此操作,请使用修改后的事件处理程序,如下所示:

    function scaleText() {
        console.log("scale=" + t.getScaleX() + " w=" + t.getWidth());
        if ((t.width * t.getScaleX()) > c.width) {
            t.setScaleX(c.width / t.width);
        }
    }

    $("input").on("input", function () {
        if (t) {
            canvas.remove(t);
        }
        var textToDraw = $(this).val();
        t = new fabric.Text(textToDraw, {
            left: 0,
            top: 0
        });
        scaleText();

        t.on("modified", function (options) {
            scaleText();
        });

        canvas.add(t);
    });