javascript - 是否可以更准确地测量 SVG 文本高度?

标签 javascript css svg

我正在尝试测量用于呈现具有给定字体和 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(' '));
  });
});

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

最佳答案

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

但是,有一些 JS 库可能会派上用场。例如:

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

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

关于javascript - 是否可以更准确地测量 SVG 文本高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26290134/

相关文章:

java - Docker 容器阻塞中的 Apache Batik 转码器

javascript - Angular Material 数据表导出,路由器链接的不同名称

asp.net - 加快 Web 服务的自动完成速度并避免过多的方法调用

php - Wordpress:基于插件的自定义帖子类型

css - 从箭头中删除背景颜色

svg - 浏览器渲染时,SVG 中的箭头不会旋转

android - Android上的SVG与PNG

javascript - 访问 formGroup 值时数值显示为空字符串?

javascript - 在 AngularJs 中解析日期

html - 不为 IE7 和 IE8 提供 CSS