【问题标题】:How to resize text on canvas如何调整画布上的文本大小
【发布时间】:2017-02-16 23:28:58
【问题描述】:

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

$("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。有什么办法可以吗?

【问题讨论】:

  • 我想澄清一下,当对象框架处于画布的最大宽度并且没有在高度(Y 轴)上调整大小时,如果文字太长。
  • 另一个限制,我也做了,所以对象被限制在画布的大小,他们不能离开

标签: html5-canvas fabricjs


【解决方案1】:

是的,只需在创建文本元素后检查它的宽度,并在将其添加到画布之前设置 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);
    });

【讨论】:

  • 我遇到的问题是,当有人调整文本对象的大小时,我需要能够调整文本的大小,而不是在它被写入画布之前。
  • 真的不清楚你想要达到什么目的,你能不能制作一个 jsFiddle 或类似的东西来说明这个问题?
  • 我正在尝试执行您提到的操作,但在将文本写入画布后执行此操作。
  • 我已经添加到答案中,以展示当用户调整文本对象大小时如何做到这一点
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2020-05-27
  • 1970-01-01
相关资源
最近更新 更多