【问题标题】:Accessing font kerning information in Java2D在 Java2D 中访问字体字距信息
【发布时间】:2010-11-03 01:24:10
【问题描述】:

小背景..

我正在使用 JavaLWJGL 制作 OpenGL 游戏。我编写了一个TextRenderer-class,它使用缓存的字形页面呈现文本。字形本身在 Java2D 中呈现到BufferedImages,并与字形测量一起打包到纹理页面中。 TextRenderer 使用缓存的信息将字符绘制为带纹理的四边形。

这一切都很好,除了一件事:缺少字距调整。当然,没有必要因为文本看起来很好,但如果我可以访问字体字距调整信息,它会提高质量。

问题是..

是否可以使用纯 Java 以一种可在 Windows、Linux 和 MacOS X 之间移植的方式获取字距调整信息?当我写TextRenderer 时,我短暂地环顾四周,但找不到这样的方式..

一种可能的解决方案

如果在纯 Java 中无法做到这一点,我正在考虑使用 Freetype 编写一个单独的工具。如其功能页面中所列:

FreeType 2 提供的信息 通常无法从其他 类似的字体引擎,例如 kerning 距离、字形名称、垂直 指标等。

该工具会将常用字符的字距调整对存储到我的文本渲染器将加载并使用的文件中。所以如果你们没有提出更好的选择,这可能就是我会做的。 :)

【问题讨论】:

    标签: java fonts java-2d freetype kerning


    【解决方案1】:

    从 Java SE 6 开始,Java 可以在字体提供时提供字距调整信息。默认是关闭的,可以这样开启:

    Map<TextAttribute, Object> textAttributes = new HashMap<TextAttribute, Object>();  
    
    textAttributes.put(TextAttribute.FAMILY, "Arial");  
    textAttributes.put(TextAttribute.SIZE, 25f);  
    textAttributes.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);  
    
    Font font = Font.getFont(textAttributes);  
    

    此论坛帖子包含有关该主题的更详细讨论:

    http://forums.sun.com/thread.jspa?threadID=5359127

    【讨论】:

    • 这适用于 Java2D 文本渲染,但 AFAIK 它不允许您获得字距调整对,这是我需要的,因为我在 OpenGL 中渲染。
    • 虽然需要一些工作,但我认为可以通过编程方式使用可用信息构建一个字距调整表(例如在应用程序初始化中,或者在这种情况下您可以离线计算它)您根本不需要在 Java 中进行字距调整)。我正在考虑将这种方法用于我的一个项目。
    • 这正是我正在做的;存储字距调整对的离线工具,可能在 C 程序或 Python 脚本中使用 iText 或 Freetype。 :)
    【解决方案2】:

    我所知道的唯一能正确读取字距调整信息“somwhat”的库是来自 Apache 的 iTextFOP

    http://www.1t3xt.info/api/com/lowagie/text/pdf/BaseFont.html http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_95/src/java/org/apache/fop/fonts/(svn的链接,好像没有在线api)

    【讨论】:

    • 这两个对于获取字距调整似乎有点过头了,有没有类似 freetype2 可用于 Java,甚至是 freetype2 的 JNI 包装器?
    猜你喜欢
    • 2017-06-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    相关资源
    最近更新 更多