加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – As3字体嵌入

发布时间:2020-12-15 07:29:33 所属栏目:百科 来源:网络整理
导读:我已经看到很多与flash中的字体嵌入相关的问题,我似乎无法找到问题的答案. 我从字体swf加载字体并在高级别注册它们,以便它们可以在子swfs中使用.问题是子swf也可能嵌入这些字体,但不是明确的,这意味着它们只是嵌入,因为子swf中有使用字体的某些字符的字段.这
我已经看到很多与flash中的字体嵌入相关的问题,我似乎无法找到问题的答案.

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

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

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

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

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

谢谢!

解决方法

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

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

另一方面,你应该质疑字体是如何嵌入到孩子的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可以有不同的名称.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读