swfed 0.29 replaceShapeData リリース

以前より要望のあった、getShapeData, replaceShapeData を実装して 0.29 でリリースしました。

さりげなく getTagContentsByCID, replaceTagContentsByCID も実装してます。
これを活用すると、replaceJPEG,GIF,PNG 系の処理をかなり軽く出来ます。

ShapeData API

以下のような Flash ファイルがあるとします。(貰いものなんですが)

A の Shape の上に B の Shape が乗っかっています。
お好きなツールでダンプします。

ツールをお持ちで無い時は、以下の URL に SWF ファイルを投げ込んで下さい。

例えば、swftools についてくる swfdump は以下のように表示します。

awm.jp:~/swfed-0.29% swfdump a+b.swf
[HEADER]        File version: 4
[HEADER]        File size: 511
[HEADER]        Frame rate: 12.000000
[HEADER]        Frame count: 1
[HEADER]        Movie width: 240.00
[HEADER]        Movie height: 240.00
[009]         3 SETBACKGROUNDCOLOR (ff/ff/ff)
[002]       220 DEFINESHAPE defines id 0001
[027]         4 DEFINESPRITE defines id 0002
[01a]         6          PLACEOBJECT2 places id 0001 at depth 0001nbits =0, line=866
[001]         0          SHOWFRAME 1 (00:00:00,000)
[000]         0          END
[01a]         9 PLACEOBJECT2 places id 0002 at depth 0001nbits =10, line=866
[002]       206 DEFINESHAPE defines id 0003
[01a]         9 PLACEOBJECT2 places id 0003 at depth 0003nbits =11, line=866
[001]         0 SHOWFRAME 1 (00:00:00,000)
[000]         0 END

DEFINESHAPE(ベクター情報のタグ) は id 0001 id 0003 の2つある事が分かります。
試しに id 0001 の Shape を取り出して id 0003 の Shape に上書きしてみます。

awm.jp:~/swfed-0.29% php ./sample/swfgetshapedata.php a+b.swf 1 > 1.shape
awm.jp:~/swfed-0.29% php ./sample/swfreplaceshapedata.php a+b.swf 3 1.shape > 3.swf

B が A に入れ替わりました。\(^o^)/

制限事項

  • シェイプ中にビットマップ画像を混ぜたケースには対応してません
  • サイズが変わった場合に、どうずれるのか分かりません。