- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据 MDN , .measureText().width
“包含以 CSS 像素为单位的文本的提前宽度(该行内框的宽度)”,这意味着屏幕上的显示大小,这意味着如果我调用 .scale(2,2)
在我调用 .measureText()
之前在 Canvas 上,我将得到两倍大的宽度。但是,我在 Chrome 上的测试表明 .measureText()
在我缩放 Canvas 时不会改变。在我看来,即使我在不同的 Canvas 上调用该函数,.measureText()
也会返回相同的内容,只要使用的字符串相同即可。
我是不是读错了 MDN,我能期望所有现代浏览器都以与 Chrome 相同的方式工作吗?
我为什么问这个问题:
我正在尝试使用离屏 Canvas 进行预渲染,但离屏 Canvas 的宽度取决于我需要显示的文本量。因此,在创建屏幕外 Canvas 之前,我在主 Canvas 上调用 .measureText()
似乎更可取。
最佳答案
CSS 像素是实际物理像素之上的抽象像素大小/单位。如果我们将浏览器窗口缩放到 200%,定义为 100px CSS 像素的内容仍将是 100px CSS 像素,但它将占用 200 个物理像素。
因此,当结果以 CSS 像素形式返回时,这意味着尺寸不受比例等因素的影响。
因此,无论 Canvas context 上的当前变换如何,都应该安全地假设您将获得相同大小的字体。
而且很容易验证:
var ctx = document.createElement("canvas").getContext("2d");
ctx.font = "20px sans-serif";
console.log("Scale 100%", ctx.measureText("WWW").width);
ctx.scale(2,2);
console.log("Scale 200%", ctx.measureText("WWW").width);
在 Firefox 中:
在 Blink 引擎中(这里是 Opera):
IE11:
等等。尽管应用了缩放变换,但大小还是相等的(浏览器之间的数字略有不同与浏览器使用的字体引擎以及它如何计算/呈现字体有关)。
关于javascript - CanvasRenderingContext2D.measureText() 是否随当前转换而变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42385798/
我在使用 skia measureText() 函数测量文本时遇到问题。返回值不准确。 SkPaint *skPaint = new SkPaint(); SkTypeface* myFont = S
我预计 TAB 字符会比 SPACE 字符宽,但在 HTML5 canvas 中,它们是相同的。加上其他一些,这不是那么重要: var c=document.getElementById('mycan
我有一个位图对象,我想在其上绘制一些文本。该文本应该针对给定点正确对齐。这就是我现在的做法: newBitmap = Image.FromFile(bg) as Bitmap; Graphics g
所以我使用Paint的measureText()方法来测量一段文本的宽度,但是我想根据一定的文本大小来测量文本。假设我想获得一个文本段的宽度,当它占据某个 TextView 时,它将是 20 个缩放像
嗨,我正在使用 TextRenderer.MeasureText() 方法来测量给定字体的文本宽度。我使用 Arial Unicode MS 字体来测量宽度,这是一种包含所有语言字符的 Unicode
调用 TextRenderer.MeasureText 如下: TextRenderer.MeasureText(myControl.Text, myControl.Font); 并将结果与控件的
我有一个长字符串(约 10 万个字符)。我需要知道这个字符串的长度。我叫 Size s = TextRenderer.MeasureText(graphics, text, font); 但它返回宽度
我正在使用 measureText() 一次显示一个字符的文本,但它给了我错误的值。 我有一个绘制字符的函数 drawChar(ch)、一个上下文“ctx”和一个将字符定位在 Canvas 上的变量“
我想使用 cavsTxt.measureText 找到文本元素的宽度。根据宽度,我会检查它是否从父元素溢出。我在更改字体系列及其大小时得到了不同的宽度。 cavsElem = document.cre
根据 MDN , .measureText().width “包含以 CSS 像素为单位的文本的提前宽度(该行内框的宽度)”,这意味着屏幕上的显示大小,这意味着如果我调用 .scale(2,2) 在我
Paint.measureText 对于阿拉伯语文本不准确。这是我尝试过的: 我有一个 TextView tv1。 tv1.getWidth(); 给出 480,没问题。 tv1.getPaint()
我试图在我的 TextBox 子类中绘制 80 个字符的边距。这是我的代码: class FooTextBox : TextBox { ... void UpdateMarginPos
我想我不知道要使用什么搜索词,这应该很简单...我用什么来确定字符串的宽度(以英寸为单位)。 Dim sSize As System.Drawing.SizeF Dim
编辑:最初我只检查了桌面浏览器 - 但对于移动浏览器,情况更加复杂。 我遇到了一些浏览器及其文本呈现功能的奇怪问题,我不确定是否可以采取任何措施来避免这种情况。 Android 上的 WebKit 和
我试图在 HTML Canvas 上的一串字符下画一条线,但从 measureText 返回的值是错误的。 代码如下: var theCanvas = document.querySelector(
在canvas中测量文本时,经常会看到如下代码 w = c.measureText(d.text + "m").width 来自 https://github.com/jasondavies/d3-c
我需要计算客户提供的所有文本的长度(以像素为单位)。问题是他们只提供了一种常规字体,而斜体样式必须由 Android 呈现。一个已知的 Android 错误是,对于斜体(呈现为斜体)字体,未正确计算
我想在给定一定宽度的可用 Canvas 的情况下测量文本的高度。我传递的文本很长,我知道会换行。为此,我调用以下方法: using System.Windows.Forms; ... string t
我正在使用 Paint.getTextBounds() 测量文本,因为我对获取要呈现的文本的高度和宽度感兴趣。但是,实际呈现的文本总是比 .width() 宽一点。的Rect getTextBound
如果我给 TextRenderer.MeasureText 一些要测量的文本和要使用的宽度,它将返回显示该文本所需的高度。 private static int CalculateHeight(str
我是一名优秀的程序员,十分优秀!