(转)Flash中文字体嵌入终极解决方案

国内关于FLASH中文字体嵌入的文章少的可怜,整理这篇文章前在网上搜罗了几个小时,也没找到多少有用的资料

网上流传的中文字符嵌入大致可以分为三种

一、嵌入字体库

这种方法被老外推崇为完美解决方案,但是26个英文字母的字体库加起来能有多少K?而中文的字体库一般都在5-10M,不得不承认,这种方法的却不 错,前提是等过几年网络带宽速度能够快到加载一个几M的中文字体库只需要一瞬间的时候才成,除非是本地的,这种方法不适于网络传播。

二、动态文本嵌入

既将制定的几个字嵌入到SWF文件中,我以前发表过一篇Flash动态文本支持中文的方法,就是当时一直追寻一种完美的解决方法,其实很多时候只需要嵌入几个字符就可以搞定,没必要去搞那么复杂的东西。这种方法比较适用于FLASH+XML导航、sifr等。

三、运行时共享

首先新建立一个”MyArial”字体,选择为ActionScript导出。然后选择为运行时共享导出,填入完整文件路径。最后发布fontLibrary.swf文件。这样我们就得到了一个运行时字体库,下面我们再来看看如何在其他swf中使用。

新建一个fla文档,在文件菜单下选择打开外部库。在新打开的库面板中可以看到我们刚才建立的”MyArial”,把它拖动到当前文件的库面板中。Flash自动为我们导入了这个字体,为运行是共享导入表示这个元件是外部导入的。

现在和正常使用字体元件一样,创建一个动态文本框,选择”MyArial”字体,随便打入一些文字,发布文件。从生成的文件量上来分析可以得出字体 矢量信息并没有被编译进来,而是动态地从fontLibrary.swf获取的。Flash Player自动为我们完成了这一过程。

四、利用ActionScript里的Font类来向系统动态的注册字体(推荐)

今天要贴的是第四种方法,也是目前我感觉最好的办法

是利用ActionScript里的Font类来向系统动态的注册字体。首先用Flash中文嵌入助手生成类代码,贴进Flex编辑器,将其作为文档类编译生成fontLibrary.swf文件。

注意构造函数下的这句代码:

Font.registerFont(ClassName);

通过执行registerFont()方法,一旦fontLibrary.swf被加载(即实例化),我们就在系统中注册了名为”FontName”的字体。当然我们也可以在需要的时候再去向系统注册而不在构造函数中执行。

字体注册后,就等同于在客户端安装了这种字体,我们可以随意的使用。

相比第三种方法只能嵌入整个字体的限制(参见前文对于字体元件的解释),这种方法不仅解决了问题,而且更加灵活。也是目前使用汉字文字共享库的唯一办法,下面让我们来看一下实例。

建立FontLibrary.fla文件,在第一帧输入以下代码:

1
2
3
4
[Embed(systemFont="华文中宋", fontName="MyFont", unicodeRange="U+4e2d,U+6587,U+5b57,U+578b", mimeType="application/x-font")]
var MyClass : Class;
 
Font.registerFont(MyClass);

我们建立了一个”MyFont”字体,包含了“华文中宋”字体的四个中文字符矢量信息:“中文字型”,并向系统注册。执行编译生成了fontLibrary.swf文件。

然后另外建立要使用字体库的文件,在第一帧写下以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest("fontLibrary.swf"));
 
function completeHandler(event : Event):void {
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
    var fmt:TextFormat=new TextFormat("MyFont",68,0x336699); //使用MyFont字体
    var txt : TextField = new TextField();
    txt.autoSize=TextFieldAutoSize.LEFT;
    txt.embedFonts=true;
    txt.text="中文字型";
    txt.setTextFormat(fmt);
    addChild(txt);
}

以上代码先用loader加载fontLibrary.swf。当加载完毕以后,新建的文本框就可以使用我们的自定义字体”Myfont”了。

附件:Flash中文嵌入助手 感谢工具作者Kevincao

 

这个应该和解决 openpeak 的 flash 中文化有关

One Response to “ (转)Flash中文字体嵌入终极解决方案 ”

  1. 王智泉说道:

    你好高手,我购买了国外的一个flash模板,可是嵌入中文字符的问题一直无法解决,希望可以得到帮助,当然我愿意付费。期待回复!

发表回复