首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FLASM或SWFMILL对swf文件进行组装/拆卸。其他选择?

使用FLASM或SWFMILL对swf文件进行组装/拆卸。其他选择?
EN

Stack Overflow用户
提问于 2013-12-12 15:14:30
回答 1查看 1.2K关注 0票数 0

我们有一个相对简单的SWF,它是由第三个人创建的,基本上是围绕一些文本移动的。我需要能够每天修改文本,但我没有Flash,我不知道如何使用Flash。因此,在Flash中打开和修改它不是一种选择。外部文件也不是一个选项。

我尝试使用FLASM和SWFMILL来分解SWF,但是结果没有显示实际的文本。

在FLASM中,我使用flasm -d main_ver3.swf > main_ver3.flm。这就是结果:ver3.flm

对于swfmill,我使用了swfmill swf2xml main_ver3.swf main_ver3.xml。这就是结果:ver3.xml

在这两款手机中,我都没有看到一些添加到Flash中的文字,比如“黑莓曲线”、“苹果iphone”、“诺基亚Lumia”。

问题是什么?文本是使用Flash的文本工具创建的。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-12 15:33:25

是的,不幸的是,它不会像替换文本字符串那么容易。SWF是一种复杂的格式,有很多可能性。在您的示例中,字体作为一组符号嵌入,字体(字母)在文本对象中被引用。

漫画无字体在以下标签下定义:

代码语言:javascript
复制
  <DefineFont3 objectID="15" isShiftJIS="0" isUnicode="0" isANSII="0" wideGlyphOffsets="0" italic="0" bold="0" language="1" name="Comic Sans MS">

该标记中定义了一组符号,您将注意到第十个字形(如果从0开始计数,索引为9)有一个map="65“值:

代码语言:javascript
复制
      <Glyph map="65">
        <GlyphShape>
          <edges>
            <ShapeSetup x="12500" y="300" fillStyle0="1"/>
            <CurveTo x1="-920" y1="0" x2="-680" y2="-2360"/>
            <CurveTo x1="-260" y1="-900" x2="-390" y2="-2250"/>
            ...

小数"65“是ASCII中的大写字母A。因此,上面的抽签调用画出了一个大写字母A。后面的文字记录以字形9 (ascii 65,大写A)开头,并详细说明了“Apple iPhone”是(我添加了字母):

代码语言:javascript
复制
  <DefineText objectID="22">
    <bounds>
      <Rectangle left="26" right="2560" top="81" bottom="574"/>
    </bounds>
    <transform>
      <Transform transX="0" transY="0"/>
    </transform>
    <records>
      <TextRecord>
        <records>
          <TextRecord6 isSetup="1" objectID="15" y="440" fontHeight="400">
            <color>
              <Color red="255" green="255" blue="255"/>
            </color>
          </TextRecord6>
          <TextRecord6 isSetup="0">
            <glyphs>
              <TextEntry glyph="9" advance="293"/>   #  9 = A
              <TextEntry glyph="25" advance="214"/>  # 25 = p
              <TextEntry glyph="25" advance="214"/>  # 25 = p
              <TextEntry glyph="21" advance="110"/>  # 21 = l
              <TextEntry glyph="17" advance="219"/>  # 17 = e
              <TextEntry glyph="0" advance="120"/>   #  0 = space
              <TextEntry glyph="19" advance="112"/>  # 19 = i
              <TextEntry glyph="25" advance="214"/>  # 25 = P
              <TextEntry glyph="18" advance="231"/>  # 18 = h
              <TextEntry glyph="24" advance="210"/>  # 24 = o
              <TextEntry glyph="23" advance="209"/>  # 23 = n
              <TextEntry glyph="17" advance="219"/>  # 17 = e
            </glyphs>
          </TextRecord6>
          <TextRecord6 isSetup="0">
            <glyphs/>
          </TextRecord6>
        </records>
      </TextRecord>
    </records>
  </DefineText>

我不知道advance="###“是什么,但我猜它是定义字母间距的。l,i和空间只有约100个单位宽,而其他字母约200个单位。

此外,主权财富基金是紧凑的,所以它不能保证你有每个必要的字形,以随时替换文本-它可能只有所需的符号,以渲染已经在SWF中的文字。

总之,用这些工具来修改SWF是可能的,但是对您来说,修改这个文本需要一些挖掘和努力。

还要注意,如果设计人员很小心,您可以构建一个SWF,它使用一个简单的可替换的textfield进行反编译。它需要从AS3代码(也称为操作)中定义的数组中提取文本字段的文本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20547194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档