Tomblooハックス – Flash SWFからJPEGファイルを取り出す

Spark勉強会 JSplashの資料を公開+α – 最速チュパカブラ研究会を見てpure javascriptでFlashを再生できるなら、Flashの中のオブジェクトも触り放題で長年のTumblrユーザの夢であるFlashの中身をpostできるのでは!

と思ったけど調べてみるとJSplash自体はSWFのパーサを持っているわけではなくて、あらかじめswfmill swf2xml and xml2swfで作ったXMLをJSONで持っておいてそれを使うようになっていました。そこで方向を見失ってとりあえずページの中にあるembedタグのSWFを全部読み込んで中に入っているjpegを一覧表示するものを作ってみました。

使い方

ファイルをダウンロードして、Tomblooのscriptディレクトリに入れたあと、一度Firefoxを再起動して(もしくはTomblooのファイル再読み込みを行って)からCtrl+Shift+DもしくはFirefoxのTomblooのメニューから実行します。

ダウンロード

gist: 18326 — GitHub

scriptディレクトリにコピーする

Tomblooのscriptディレクトリにダウンロードしたswfparser.jsをコピーします。コピーしたらFirefoxを再起動してください。

詳しくはiview for Tomblooscriptディレクトリにコピーするを参照してください。

実行

Flashの表示されているページでCtrl+Shift+Dを押すかFirefoxのメニューのTools/Tombloo/swfparserという項目を選んで実行すると、Flashのファイルから抽出されたJPEGファイルがページ上部に表示されます。下はYahoo! JAPANの右側ブランドパネルFlash広告の例。

yahoo

どうでもいいけどFlashが表示されるサイズよりも大きいjpegファイルが埋まってるものなんですねー。

注意点

  • このスクリプトはSWFファイル自体が内部に持っているJPEGデータを表示するだけなので、Flashが動的に外部から読み込んで表示しているJPEGファイルは取り出せません。
  • いまのところDEFINEBITSJPEG(6), DEFINEBITSJPEG2(21), DEFINEBITSJPEG3(35)で定義されている画像が取り出せます。DEFINEBITSLOSSLESS系はビットマップをWindowsのBMPに変換する方法がよくわからなかったので対応していません。
  • 表示された画像はsrcがdata uriになっているのでTumblrにpostしたりはできません。Tomblooからは31_Tombloo.Service.extractors.jsを適用するとpost可能になります。パッチをTombloo本体にマージしてもらったので次のバージョン(0.3.24)からこのパッチなしにpostできるようになります。
    0.3.24 がリリースされたのでTomblooをアップデートすればpostできます。

About this entry