前面已经把基本上嵌入字体的相关知识都梳理了一遍:
- 如何在Flash IDE中嵌入字体
- 如何在Flash IDE中使用嵌入的字体
- 如何使用Flex SDK嵌入字体
- ActionScript如何使用嵌入的字体
- 运行时共享字体库的两种方法
下面讨论一下几种问题和可能性:
- Font类只有registerFont()方法,而没有unregisterFont()。不知道如果向系统中多添加一些字体定义以后会不会有内存占用的问题。
- 把整个中文字库完全嵌入所增加的文件量大约在5M-10M,现在的视频Intro也差不多要3M-5M。随着宽带的进一步发展,把中文字库完全嵌入也并非不可能。
- 在文字内容可知的情况下,不管用哪种方法,我们都必须手动去生成字体库。当然如果是配合CMS后台的话,可以编写后台程序来批处理的生成AS文件。配合命令行调用编译器甚至可以直接生成包含字体的swf文件。关于这方面的讨论,可以看看这里或这里。
- 进一步想,用户输入的字符用嵌入字体来渲染也并非不可能。关键是精简初始字库,然后逐步加载更完整的字库。比如我们可以先加载常用汉字"Font1"(1M-2M左右),然后再加载其余的汉字"Font2"。
那么如何调用正确的字体来实时显示呢?我们可以借助Font类实例的一个hasGlyphs()方法,来检测当前字体是否包含了某个字符的矢量信息(glyphs)。如果字符已经可以被渲染,则设置embedFonts,否则我们则用系统字体来显示。
基于这些想法,我已经在互联网上找了常用汉字表并预置在了我的Flash中文字体嵌入助手中。如果大家有更好的想法,欢迎在这与我交流,让汉字在Flash里更酷些。
update:
作为总结,不能漏了Flash Player 10里支持的新Text Engine(FTE)。我今天试用了一下,也翻了一些网上的相关讨论。觉得这技术目前还不够成熟,Adobe对Flash和Flash Builder(Flex)两者的定位还有点摇摆。FTE使用的CFF字体不能在TextField中使用,是现在最大的问题。只好寄望于下一代Flash出来了。
字体工具推荐:
- FontCreator - 好用的字体编辑工具
- MainType - 同一公司出品的字体管理工具
更多参考: