我们有一个相对简单的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的文本工具创建的。
谢谢。
发布于 2013-12-12 15:33:25
是的,不幸的是,它不会像替换文本字符串那么容易。SWF是一种复杂的格式,有很多可能性。在您的示例中,字体作为一组符号嵌入,字体(字母)在文本对象中被引用。
漫画无字体在以下标签下定义:
<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“值:
<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”是(我添加了字母):
<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代码(也称为操作)中定义的数组中提取文本字段的文本。
https://stackoverflow.com/questions/20547194
复制相似问题