IO_SWF 2.2.2 をリリースしました

二回リリースしちゃいましたが、上の方の #607 が正しいです。ごめんなさい。

今回のリリースは、Shape に NewStyle が含まれる SWF に対してdeformeShape 又は rebuild を使うと壊れた SWF バイナリが生成される不具合の修正と、sliceShapeRecords メソッド(デバッグに便利です)の追加が目的です。

ChangeLog

  • countShapeRecords と sliceShapeRecords メソッドを追加
  • それらを利用する swfsliceshaperecords.php を追加
  • SHAPE build の不具合修正
    • NewStyle で FillStyles, LineStyles のどちらかしかない場合にバイナリ構築に失敗する不具合を修正
  • SHAPE build のデータ整合性ケア
    • NewStyle で FillStyle, LineStyle の片方しかない場合に前回の numBits を持ち越す
    • ChangeStyle レコードの全 state ビットが off だった時は moveX bit を立てる。(でないと EndShape 相当になるので)
  • PlaceObject2 のダンプ表示に Move フラグを追加。

今回の目玉機能

  • ShapeRecords の一部を取り出す機能を入れました。
  • サンプル (colorformat.swf)


  • この SWF は全部の四角がひとつの SHAPE になっているので、Shape_ID だけでは分割できません。
  • 引数にファイルだけ指定すると、shape_id の更に細かい単位でリストします。(ChangeStyle を境にして ShapeRecord をグルーピングしています)
yoya@sakura:~/svn/IO_SWF$ php sample/swfsliceshaperecords.php colorformat.swf
shape_id: 8:
        [0]: FillStyle1:1 Straight:4
        [1]: FillStyle1:2 Straight:4
        [2]: FillStyle1:2 Straight:4
        [3]: FillStyle1:2 Straight:4
        [4]: FillStyle1:2 Straight:4
        [5]: FillStyle1:2 Straight:4
        [6]: FillStyle1:2 Straight:4
  • shape_id の 0 個目から1 個目を残す指定ができます。
yoya@sakura:~/svn/IO_SWF$ php sample/swfsliceshaperecords.php ~/flash/colorformat.swf 8 0 1 > t.swf
  • 結果、指定した範囲内の ShapeRecord だけ残ります。
yoya@sakura:~/svn/IO_SWF$ php sample/swfsliceshaperecords.php t.swf
shape_id: 8:
        [0]: FillStyle1:1 Straight:4
        [1]: FillStyle1:2 Straight:4