【问题标题】:Making Text fit to HTML5 Canvas?使文本适合 HTML5 画布?
【发布时间】:2016-03-23 18:33:45
【问题描述】:

我正在尝试将一些文本呈现到单独的画布上,如下所示:

var tmpCanvas = document.createElement("canvas");
var tmpContext = tmpCanvas.getContext('2d');
tmpContext.textAlign = 'center';
tmpContext.font = size + 'px';
tmpCanvas.width = tmpContext.measureText(txt).width;
tmpCanvas.height = size;
tmpContext.fillStyle = "#000";
tmpContext.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);
tmpContext.fillStyle = color;
tmpContext.fillText(txt, tmpCanvas.width / 2, tmpCanvas.height / 2);

然后这个画布被渲染到主画布的中心:

context.drawImage(cachedText, (d_canvas.width / 2) - (cachedText.width / 2), (d_canvas.height / 2) - (cachedText.width / 2), cachedText.width, cachedText.height);

我正在这样做,因为绘制的文本非常复杂,所以我不想重复多次绘制操作。然而,问题是尽管我将画布大小设置为等于文本大小,但文本比画布小,而且偏离中心。如上所述,如何创建带有预渲染文本的画布/图像对象。

这里有一个小提琴来说明这个问题:http://jsfiddle.net/x4t1vjam/

【问题讨论】:

    标签: javascript html canvas


    【解决方案1】:

    因此,事实证明,您的代码存在一些问题。首先,当您在画布上设置字体大小时,您还必须设置字体类型 - 在我的示例中,它被设置为通用的“衬线”字体。

    其次,您的绘图代码的顺序很奇怪,因此在使用字体大小设置画布宽度之后,它在用于绘制字体之前被覆盖。

    最后,定位逻辑错误。我已经尽我所能快速修复它,但它需要一些调整。你可以看到它大部分在这里工作;

    http://jsfiddle.net/x4t1vjam/5/

    代码需要清理,可能会将一些值存储在代码前面的变量中,以避免两次声明它们。而且由于我无法在没有代码示例的情况下发布答案,因此我在此处进行了更改。

      tmpContext.textAlign = 'center';
      tmpContext.font = size + "px serif";
      tmpCanvas.width = tmpContext.measureText(txt).width;
      tmpCanvas.height = size;
      tmpContext.fillStyle = "#000";
      tmpContext.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);
      tmpContext.fillStyle = color;
      tmpContext.font = "100px serif";
      tmpContext.fillText(txt, (tmpCanvas.width / 2) - tmpContext.measureText(txt).width / 2,
                          size);
    

    【讨论】:

    • 当我将大小改为 200 时,它看起来真的很糟糕。画布的高度似乎在变化,但文字保持不变。
    • 因为您将高度设置为大小,所以这里tmpCanvas.height = size - 原来这里有一些错误。让我看看其他人并更新我的答案。
    • 是的,但是文本也应该放大到那个大小,因为我将字体大小设置为那个大小。对吗?
    • 哦,我搞砸了。谢谢!我不知道设置填充样式会重置 .font 属性。
    • 我也不是。画布处理事情的方式似乎很奇怪。
    猜你喜欢
    • 2013-07-31
    • 2020-06-23
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多