JavaScript Canvas 文本比例

标签 javascript canvas aspect-ratio text-size

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

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

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);
}

Canvas 字段中的文本如下所示:

enter image description here

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

最佳答案

我认为你没有指定 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;

我使用了窗口的宽度和高度,但任何其他元素都可以。

关于JavaScript Canvas 文本比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60939287/

相关文章:

javascript - 如何连续 20 个月每月显示一条新消息

Android - 从 SurfaceView 访问按钮

android - 如何使位图适合圆角正方形?

javascript - 在Django中实现Chat的最佳实践(存储在线用户)

javascript - 为什么 或 &#8203 被随机插入到我的 html 正文中?

javascript - Google Graphs 轴顺序

html - Canvas 是否会在每次发生任何变化时重新绘制自己?

javascript - Safari 上的 FileReader 即将启动

android - 固定纵横比 View

html - 使用 CSS 保持 div 的纵横比