【问题标题】:How Can I Detect the Characters Defined in a Font?如何检测字体中定义的字符?
【发布时间】:2012-07-24 05:21:04
【问题描述】:

我正在制作一个简单的工具来帮助处理 css 图标字体。

目前,它采用指定的wingdings 样式字体,并以它出现在每个unicode 数字上的方式表示它,并在我离开的那一刻与标准系统字体(例如arial)并排表示Unicode 数字 33-255。

熟悉字体和字符编码的人已经猜到了,这些地方很多都是空的。这是一个例子:

如您所见,实际上值得为该字体显示的字符是少数,而且此 unicode 范围内的许多字符甚至不会显示为默认的无衬线字体。这不是关键的东西,无论如何都会显示所有可用的字符,但纯粹出于好奇,我很想知道是否有办法判断字体中表示哪些字符。有人知道解决办法吗?

理想情况下,服务器端解决方案是首选,任何您喜欢的语言。但是,任何解决方案都是有价值的。

为了好奇,我现有的代码在 github 上:Font Looper

我希望平面文件的演示不会太冒犯任何人,我正在努力保持这个简洁和刻薄。

【问题讨论】:

  • 好主意。祝字体循环器好运。对不起,我情不自禁,但我喜欢它

标签: php html css character font-face


【解决方案1】:

我相信您要查找的信息在字体的CMAP 表中。我不是字体专家,但我的理解是 CMAP 表将 unicode 点映射到字形索引。因此,如果没有映射到 unicode 点的字形,则可以假定该字体不支持该字符。

这是我使用 WPF 媒体库找到的一些示例 C# 代码:

var fontFamilies = System.Windows.Media.Fonts.GetFontFamilies(@"C:\Windows\Fonts\Arial.ttf");

foreach (var family in fontFamilies)
{
    foreach (var typeface in family.GetTypefaces())
    {
        var glyph = null as System.Windows.Media.GlyphTypeface;

        if (typeface.TryGetGlyphTypeface(out glyph))
        {
            foreach (var kvp in glyph.CharacterToGlyphMap)
            {
                Console.WriteLine(kvp.Key.ToString() + " : " + kvp.Value.ToString());
            }
        }
    }
}

不知道这对您有多大帮助,但您确实说过任何语言/解决方案都会很有价值。

所有这些类都可以在 PresentationCore.dll 程序集的一部分 System.Windows.Media namespace 中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 2021-12-19
    • 2010-09-05
    • 1970-01-01
    • 2011-03-03
    • 2019-11-24
    • 2015-12-02
    • 2010-12-13
    相关资源
    最近更新 更多