giftransmask
gifovlap の実験用素材を作るのに、giftransmask を作成しました。
丁度、ming に付属している gif2mask の逆に近い動作*1をします。
giftransmask foo.gif baa.alpha > baz.gif
とすると、baa.alpha αチャネル情報を元に goo.gif に透明pixelを上書きした baz.gif が生成されます。
Flash からマスク付き画像を抜き出す
swfed と組み合わせると以下のような感じで使えます。
まず抜き出したい画像を探します。
に Flash の SWF ファイルを放り込んだ後、左上の画像一覧のリンクを辿ります。
透明度付きの画像は DefineBitsJPEG3(35) が相当するので、例えばその中から 298 を選ぶと、以下のコマンド*2を用いてデータを抜き出せます。
php swfgetjpegdata.phps chara.swf 298 > chara-298.jpg php swfgetjpegalphadata.phps chara.swf 298 > chara-298.alpha
それから、適当なツール*3で chara-298.jpg を変換して chara-298.gif にします。
あと、何とかして 透明=on で保存してください…*4 ごめんなさい。ごめんなさい。
- 抽出した画像
- 抽出したマスクデータ
そして giftransmask を実行。
giftransmask chara-298.gif chara-298.alpha > chara-298-trans.gif
やったーっ!
プログラム
gcc -O2 -o giftransmask giftransmask.c -lgif
制限事項
入力元に transparent 対応 *5 フォーマットでない GIF を指定してもダメです。
- transparent index を 0xff 決め打ちにしてるので 256 色全部使ってる画像だと問題あり
- アニメーションGIF 未対応。1枚目のフレームだけ適用します。
そのうち何とかします…