javascript - measureText() method of Canvas 2d context giving different widths sometimes
问题描述
I am using Canvas 2d context to calculate the width of the text
Ex: canvas2DContext.measureText('Sivakumar Tadisetti')
I am using font as bold 15px "Open Sans", serif
Issue: Sometimes measureText()
is giving 119.4835
and sometimes 115.3423
as widths.
Why I am getting different widths. What I am doing wrong here?. Please find the snippet from below.
var canvas = document.createElement('canvas');
var canvas2DContext = canvas.getContext('2d');
var textWidth = canvas2DContext.measureText("Sivakumar Tadisetti").width;
解决方案
有点盲目,但对我来说,这听起来像你没有正确等待你的字体被加载:
const ctx = canvas.getContext('2d');
ctx.font = 'bold 15px "Open Sans", serif'
const before_load = ctx.measureText("Sivakumar Tadisetti").width;
console.log('before', before_load);
// load the font
document.fonts.ready
.then(() => {
ctx.font = 'bold 15px "Open Sans", serif'
const after_load = ctx.measureText("Sivakumar Tadisetti").width;
console.log('after', after_load);
});
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
<canvas id="canvas"></canvas>
为避免这种情况,您可以在document.fonts.ready
Promise 的回调中执行代码:
document.fonts.ready.then(startYourCode);
document.fonts.ready.then(() => {
const ctx = canvas.getContext('2d');
ctx.font = 'bold 15px "Open Sans", serif'
const textWidth= ctx.measureText("Sivakumar Tadisetti").width;
console.log(textWidth);
});
#canvas { font-family: "Open Sans"; }
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
<canvas id="canvas"></canvas>
推荐阅读
- c++ - 用于将 shared_ptr 向量填充到基础和派生对象的函数模板
- php - 使用 queue:work 有问题吗?
- python - 不能将 Postgres 的 ARRAY 与 SQLAlchemy 一起使用
- c - 如何在 C 中创建结构的“对象”
- docker - 如何在 K8S 中保持没有入口点的 docker pod 运行?
- c# - 当我使用 (C#) 打开 excel 时,我无法使用来自外部插件(例如Bloomberg)的公式
- android - Android - MediaPlayer 未在 Android 9 设备上播放 SHOUTcast 流 URL
- python - 如何在 cayley graph db 中加载 json api
- web-hosting - 如何在虚拟主机中使用本地系统作为文件管理器
- javascript - React - 更新状态数组时对象中的唯一键被覆盖