【问题标题】:Javascript - Get real letter width and height (without line-height)Javascript - 获取真实的字母宽度和高度(没有行高)
【发布时间】:2014-06-06 16:37:54
【问题描述】:

在 Adob​​e Illustrator(或 Photoshop)中

字母 A 字体系列:Arial 字体大小:396.55pt 措施: - 宽度:93.8 毫米(266 像素) - 高度:100.2 毫米(284 像素)

在 Javascript 中测量: - 宽度:265px(匹配,正确) - 高度:456px(不匹配,抢行高,错了)

我怎样才能得到字母的确切高度?

// 6pt ---------------- 8px
// 96px --------------- 25.4mm

var arial_A_upper_pt = jQuery("#arial_A_upper_pt").html();
jQuery("#arial_A_upper").html("A");
jQuery("#arial_A_upper").css("font-size", arial_A_upper_pt + "px");

var arial_A_upper_width_on_px = jQuery("#arial_A_upper").width(); // on PX
//  var arial_A_upper_width_on_mm = ((arial_A_upper_width_on_px * 25.4) / 96);
//  arial_A_upper_width_on_mm = arial_A_upper_width_on_mm.toFixed(2);
jQuery("#arial_A_upper_width").html(arial_A_upper_width_on_px + "px");

var arial_A_upper_height_on_px = jQuery("#arial_A_upper").height(); // on PX
//  var arial_A_upper_height_on_mm = ((arial_A_upper_height_on_px * 25.4) / 96);
//  arial_A_upper_height_on_mm = arial_A_upper_height_on_mm.toFixed(2);
jQuery("#arial_A_upper_height").html(arial_A_upper_height_on_px + "px");

示例:http://jsfiddle.net/7Cunp/6/

我需要这个:http://www.javiscript.es/desarrollo/letrascortadas/img/letter_size.jpg

【问题讨论】:

标签: javascript height width


【解决方案1】:

实际上,您在浏览器中永远不会像在 PhotoshopIllustrator 中那样获得准确的结果。

每个浏览器都以自己的方式呈现字体。 (http://css-tricks.com/font-rendering-differences-firefox-vs-ie-vs-safari)。

在您的情况下,最接近的变体是将行高与字体大小相同。

jQuery("#arial_A_upper").css("line-height", arial_A_upper_pt + "px");

因为浏览器默认设置的“正常”行高大于字体大小,所以高度比它应该的大得多。但即使你将行高设置为与字体大小相同,你也会得到更大的结果,那么它应该是。 (397 像素)

【讨论】:

    【解决方案2】:

    这是一个不容易回答的问题。我几乎可以保证没有可以调用的属性来获取值。

    首先,数据嵌入在字体文件中,JS 可能无法访问(如果我错了,请纠正我)。其次,几乎每个字体文件的值都不同。

    但是,您可以使用一些数学来获得大小的近似值。

    字母的大小是从上升的顶部到下降的底部测量的。也称为 EM。这既可以水平使用,也可以垂直使用。大写字母的大小有时被概括为 EM 的 2/3。

    所以,由于 jQuery 错误地返回了高度,但正确地返回了宽度。(EM 大小,而不是字母的实际宽度,如果你测量它:D)我会这样做:

    var EM_height = jQuery("#arial_A_upper").width()
    var uppercase_height = Math.floor(EM_height / 3 * 2)
    

    JS 不是我的强项,所以有人可能会说,如果有更好的方法。

    如果您知道它只会用于特定字体(例如 Arial),您可以获得更好的价值。

    例如。 72pt Arial 在我的电脑上用大写字母 A 测量为 51.37pt。

    51,37/72 = 0,713472222 所以这是您需要得出的比率。所以 7/10 可能是一个不错的建议。

    希望能有所帮助。

    【讨论】:

    • 我重读了您的评论,也许您正在得到实际宽度。在这种情况下,您只需获得高度。请注意,您不能相信从 pt/mm(物理绝对值)到像素(相对值,取决于介质的分辨率,例如 72ppi、96ppi、312ppi)的转换
    猜你喜欢
    • 2012-02-19
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2010-10-01
    • 2013-06-08
    相关资源
    最近更新 更多