【问题标题】:Is it possible to more accurately measure SVG text height?是否可以更准确地测量 SVG 文本高度?
【发布时间】:2014-12-05 01:48:11
【问题描述】:

我正在尝试测量用于使用带有 SVG 文本标签的给定字体呈现给定字符串的确切高度。

我尝试使用getBBoxgetExtentOfChar,但是这两个返回的高度在实际呈现的文本上方(有时下方)包含一些额外的空间。

http://upload.wikimedia.org/wikipedia/commons/3/39/Typography_Line_Terms.svg 使用此图像中的术语,我试图获取正在呈现的文本的大写高度 + 下降高度。或者,如果这是不可能的,只是上限高度。有没有计算这些值的好方法?

这是一个快速代码笔,显示了我正在谈论的额外空间: http://codepen.io/pcorey/pen/amkGl

HTML:

<div>
  <svg><text>Hello</text></svg>
  <svg><text>Age</text></svg>
</div>

JS:

$(function() {
  $('svg').each(function() {
    var svg = $(this);
    var text = svg.find('text');
     
    var bbox = text.get(0).getBBox();
    svg.get(0).setAttribute('viewBox',
                           [bbox.x,
                            bbox.y,
                            bbox.width,
                            bbox.height].join(' '));
  });
});

我知道这是一个相当特定于字体的东西,所以这可能是完全不可能的......

【问题讨论】:

    标签: javascript css svg


    【解决方案1】:

    没有。所有 SVG DOM 方法(getBBox()getExtentOfChar())都被定义为返回完整的字形单元格高度。大写高度上方的额外空间允许更高的字形 - 例如重音大写字母。我认为 HTML DOM 方法也是如此。

    但是,有一些 JS 库可能有用。例如:

    https://github.com/Pomax/fontmetrics.js

    我自己没有使用过这个库,所以我不能告诉你它有多可靠或准确。

    【讨论】:

    • 好的,谢谢。看起来您可以通过在 y=0 处渲染文本并从其高度中减去 bbox 的 y 偏移量来计算下降高度(假设占主导地位的基线设置为字母顺序)。仍然没有办法获得上升高度或上限高度......但很糟糕。
    • @pcorey 找到解决方案了吗?
    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    相关资源
    最近更新 更多