As3字体嵌入

时间:2012-10-19 19:44:15

标签: actionscript-3 fonts flash embedding

我已经看到很多与flash中的字体嵌入有关的问题,我似乎无法找到问题的答案。

我从字体swf加载字体并将它们注册到高级别,以便它们可以在子swf中使用。问题是子swf也可能嵌入这些字体,但不是明确的,这意味着它们只是嵌入,因为子swf中有使用字体的某些字符的字段。这意味着子项中的文本字段使用不完整的嵌入字体,而不是在父项或任何级别的祖父项中注册的嵌入式完整集。这也意味着可能成为这个孩子的孩子的swfs将无法获得完整的字体。

我的问题: 有没有办法告诉flash在编译时没有嵌入,在任何情况下,字体都变成了swf?如果没有,是否有工具从已编译的swf中删除嵌入字体?

到目前为止,我已经考虑过/注意到的一些事情:

  • 好像每个Font类都绑定到ApplicationDomain。 (确认这将有所帮助)
  • 在文本字段上使用设备字体不会导致嵌入任何字体。 (但不是我的选择,因为我需要字段在运行时从父swf嵌入字体。)
  • 我找不到取消注册字体的方法,或者只是告诉加载的子swfs使用父字体,这对于应用于加载的子swfs非常有用。
  • 可以将子项加载到允许字体的父定义覆盖子定义的不同上下文中。 (或者会有两个定义,如果有,哪一个优先?)
  • 从子库中加载资源并将其添加到舞台将获得该字体的父级定义。 (这是有道理的,因为资产是在孩子的领域之外创建的)
  • 一个可能的解决方案可能是不在文本字段中添加任何字符以编译swf,但这实际上不是一个选项,因为我需要使用任何字体的静态文本。

我已经开始在脑海中形成一个可能不正确的问题的定义,所以请在必要时退一步,给我一个关于问题的不同观点。到目前为止,我上面提到的问题似乎是正确的问题,如果有解决方案,我的所有问题都会消失。

谢谢!

3 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你想删除/取消注册那些不完整的字体作为已经加载但嵌入另一个swf的特定字体的版本?

嵌入的每个Font都会创建一个类,通过Loader类加载的每个swf默认都会加载到自己的应用程序域中,以防止命名空间冲突,但是您可以强制加载器将所有内容加载到当前应用程序域中Loader的load()方法的»loader context«参数。因此,您可以尝试强制相互重写同一名称空间中的类,但是您无法控制要丢弃的类,这意味着您无法检查哪个字体具有更多字形。 (也许它只会抛出错误而不是覆盖而根本不会运行,我对此并不确定。)

另一方面,你应该质疑字体是如何嵌入到孩子的swf文件中的。除了将字体嵌入为:

之外别无他法

在* .fla文件中作为»库符号«, 或者在flashbuilder的代码中或像这样的flex: [Embed(source="c:/windows/fonts/verdana.ttf", fontFamily="Verdana", embedAsCFF="false")]

或者这个:

@font-face {
    src: url("../assets/MyriadWebPro.ttf");
    fontFamily: myFontFamily;
    advancedAntiAliasing: true;
}

在mxml文件中。所以(我猜)生成的类的结果名称取决于开发人员给出的»font-family«属性(或更多设置),即使相同的字体嵌入两次类 - 名称可能因设置而异。

此外没有Font.unregisterFont()方法,所以如何管理这个方法仍然是一个很好的问题,以防你可能会以某种方式找到相同的Font类(也许RegExp成为友好的帮助者)。

我认为要正确解决这个问题,你需要在编译时进行控制,使用基于xml的* .xfl项目文件可能会有所帮助,但即使引用的Font-File也可以有不同的名称。

一个不错的问题,祝你好运

答案 1 :(得分:0)

使用带flash的字体时遇到了很多问题。在html上仍然存在问题,不同的浏览器以不同的方式呈现。

无论如何,对于flash,我构建了这个工具包,对我有很大帮助。检查如何自定义字体。如果您执行这些步骤,我很确定问题将得到解决。

https://github.com/tbwa/AS3-Toolkit/tree/master/src/com/utils/text

答案 2 :(得分:0)

原来这是我的Flash Professional版本的一个错误。我做了更新,现在可以使用运行时共享字体。我可能会将共享字体指向字体的错误URL,然后字体将来自父应用程序域,因为它们不会编译到子swfs中。我现在正在使用Flash Professional CS5.5 11.5.1。我使用的是CS5.5 11.5.0。

http://forums.adobe.com/message/3926344

感谢Adobe浪费我的时间。