【问题标题】:JavaScript Canvas Text RatioJavaScript 画布文本比例
【发布时间】:2020-07-11 08:06:12
【问题描述】:

我有一个固定大小的画布 (850x400px),当我向这个画布添加文本时,它以一种奇怪的方式放大了,我不知道为什么。

如果我没有将画布设置为特定的高度/宽度,文本显示正常,这是为什么呢?

export function addText() {
  var canvas = document.getElementById("canvas"); // 850x400px
  var ctx = canvas.getContext("2d");
  var y = 1 * 20 + 20;

  var text = {
    text: "ABC",
    x: 20,
    y: y
  };

  ctx.font = "40px consolas";
  text.width = ctx.measureText(text.text).width;
  text.height = 80;
  ctx.fillText(text.text, text.x, text.y);
}

画布字段中的文本如下所示:

如何插入像普通 40 像素字体一样缩放的文本?

【问题讨论】:

    标签: javascript canvas aspect-ratio text-size


    【解决方案1】:

    我认为你没有指定canvas HTML元素本身的宽度和高度,试试:

    addText();
    
    function addText() {
      var canvas = document.getElementById("canvas"); // 850x400px
      var ctx = canvas.getContext("2d");
      var y = 1 * 20 + 20;
    
      var text = {
        text: "ABC",
        x: 20,
        y: y
      };
    
      ctx.font = "40px consolas";
      text.width = ctx.measureText(text.text).width;
      text.height = 80;
      ctx.fillText(text.text, text.x, text.y);
    }
    <canvas id="canvas" width="850" height="400" style="background: red"></canvas>

    更新

    另一种选择是以编程方式设置宽度和高度,这将阻止缩放:

    let canvas = document.getElementById("canvas");
    
    canvas.height = window.innerHeight;
    canvas.width = window.innerWidth;
    

    我使用了窗口的宽度和高度,但任何其他元素都会这样做。

    【讨论】:

    • 好吧,它设置为宽度:100% 和高度:100%,在我的例子中是 450x850。
    • 如果你在css类中设置,那可能是问题的原因
    • 我已经解决了这个问题,我想出了几乎相同的解决方案:ctx.canvas.width = $('#imageFrame').width();ctx.canvas.height = $('#imageFrame').height(); 框架是父元素。
    猜你喜欢
    • 2015-08-12
    • 2012-11-26
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多