70 likes | 215 Views
SWF 内 Lossless 画像の PNG 化による HTML5 Flash Player 処理軽減提案. 2011/11/17(Thu) yoya@awm.jp. 提案 概要. ブラウザ上の JavaScript で SWF => HTML5 Canvas or SVG の橋渡しをする場合、 SWF 内 Lossless ビットマップ画像 が Flash 独自形式の為、 PNG や GIF といった Canvas or SVG が 認識できる画像形式に変換する必要がある。
E N D
SWF 内Lossless画像のPNG化による HTML5 Flash Player 処理軽減提案 2011/11/17(Thu) yoya@awm.jp
提案概要 • ブラウザ上の JavaScript で SWF => HTML5 Canvas or SVG の橋渡しをする場合、SWF 内 Lossless ビットマップ画像がFlash 独自形式の為、PNG や GIFといった Canvas or SVG が認識できる画像形式に変換する必要がある。 • その為、ExGameや Reel では、Zlib伸長やPNG 符号化といった重たい処理が存在すると予想される。 • SWF を予め変換する事。Flash Player 側で SWFv8 以降の仕様を1つ許容する事で、重たい処理を省略できる。
HTML5FlashPlayer の ビットマップ処理想像図 (JavaScript) RGB or RGBA Raw Bitmap Data Flash SWF PNG or GIF data PNG encode zlib uncompress DefineBitsLossless* base64 ZlibBitmapData ZlibBitmapData HTML5 Canvas or SVG DefineBitsJPEG* (custom)JPEGData (custom)JPEGData chunk sorting base64 (std) JPEGdata の処理は重たいはず
SWF Lossless 画像の PNG 化(処理する言語は何でも) Flash SWF Flash SWF ZlibBitmapData zlib uncompress DefineBitsLossless* DefineBitsJPEG2 RGB or RGBA Raw Bitmap Data ZlibBitmapData PNG data PNG encode DefineBitsJPEG* DefineBitsJPEG* (custom)JPEGData (custom)JPEGData PNG data ※ SWF を予め上記のように変換しておく。動的な SWF であれば ひな形の SWFを変換、出来れば replace 時も、この形式で格納する。
PNG 化 SWF のビットマップ画像処理 (JavaScript) RGB or RGBA Raw Bitmap Data Flash SWF (不要) PNG or GIF data DefineBitsJPEG2 PNG data base64 PNG data HTML5 Canvas or SVG DefineBitsJPEG* (custom)JPEGData (custom)JPEGData chunk sorting base64 (std) JPEGdata ※ DefineBitsJPEG2 に PNG を格納するのはSWFv8 以降の 仕様の為、既存の携帯Flash では表示できません。
SWFEditor v0.50 以降の機能 • PHP に SWFEditorを適用すると、以下のように PNG 化できます。 • http://git.sourceforge.jp/view?p=swfed/swfed.git;a=blob;f=sample/swfconvertbitmapdatatojpegtag.php • 動的生成用の replace もこの形式に対応しています。 • PHP 以外の言語でも実装は難しくないはずです。 phpswfconvertbitmapdatatojpegtag.php\ colorformat.swf > colorformat-png.swf $without_converting = true; $swfed->replaceBitmapData($image_id, $bitmap_data, null, $without_converting);