测量html5 canvas元素上的文本高度

时间:2012-07-12 12:36:59

标签: html5 text html5-canvas measurement

我知道我可以使用context.measureText来获取某些文本的宽度,如果它现在将在画布上呈现。 有没有办法做同样的但得到文本的高度?

只是想到了自己 - 也许我可以旋转文字90Deg然后测试宽度?...

3 个答案:

答案 0 :(得分:4)

这个SO答案可能是针对您的需求而过度设计的 How can you find the height of text on an HTML canvas?

我更喜欢更简单的东西:

var text = "Hello World";
var font = "Serif";
var size = "16";
var bold = false;

var div = document.createElement("div");
    div.innerHTML = text;
    div.style.position = 'absolute';
    div.style.top  = '-9999px';
    div.style.left = '-9999px';
    div.style.fontFamily = font;
    div.style.fontWeight = bold ? 'bold' : 'normal';
    div.style.fontSize = size + 'pt'; // or 'px'
document.body.appendChild(div);
var size = [ div.offsetWidth, div.offsetHeight ];
document.body.removeChild(div);

// Output
console.log( size );
var pre = document.getElementById( "output" );
if( pre )
    pre.innerHTML = size;
<pre id="output"></pre>

参考: http://www.rgraph.net/blog/2013/january/measuring-text-height-with-html5-canvas.html

答案 1 :(得分:4)

我有同样的问题,我发现的是这个。 从你的字符串中获取字体大小。 我不知道为什么,但它只适用于你在PT中设置proprety,而不是PX。

ctx.font="20px Georgia"; // This will not work.
ctx.font="20pt Georgia"; // This is what we need.

然后从中获取值。

var txtHeight = parseInt(ctx.font);

现在你有了texte的高度。 就像我说的那样,在我身边,我不得不将PT的大小设置为PX

答案 2 :(得分:1)

您可以设置画布的字体大小(以像素为单位),然后您应该将其用作文本框的高度。然而,当我这样做时,我发现我需要在像素高度上添加大约50%才能获得准确的值:

var textHeight = fontSize * 1.5;

如果这对你来说还不够好,那么有一些非常全面的解决方案here,其中一个使用getImageData方法来计算垂直像素的数量。