【swfmillでgif】swfmillを使って、画像を置換していたのですが、jpg以外の拡張子の画像置換がうまくいきません。調べたところ、jpg以外の画像はflashの方で独自のバイナリ形式を持っている様なことが書いてあり、普通には置換出来ないことが分かりました。


下記サイトでrubyのサンプルを書いてくださっている方がいたのですが、これと同じ処理をPHPで実現するにはどのように書けば良いでしょうか?
http://tmty.jp/2009/05/08/shared_swfmill_ruby/

ご存知の方がいらっしゃいましたらご教示ください。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2010/02/26 23:54:05
  • 終了:2010/03/04 09:31:18

ベストアンサー

id:Watson No.3

Watson回答回数5ベストアンサー獲得回数32010/03/01 05:25:25

ポイント50pt

GIF や PNG は SWF の独自ビットマップ形式 DefineBitsLossless2 で保持する必要があり、

imagemagickを使用して画像データを取得した後、ピクセル単位で処理して DefineBitsLossless2 に

変換しているようです。

変換している箇所は

http://github.com/tmtysk/swfmill_ruby/blob/master/lib/swf.rb

の 211 行目からの def self.image2xml(object_id, image) で行っているようです。

DefineBitsLossless2 のアルゴリズムを知らないため、詳しい処理はよくわかりませんでした。

あとXMLに保存するときにはノード名をDefineBitsJPEG2 -> DefineBitsLossless2 に変換して

保存しているのかな、と思います。

id:res01

>DefineBitsLossless2 のアルゴリズムを知らないため、詳しい処理はよくわかりませんでした。

同じく詳しい処理が良くわからないため、PHPで実現する際に何をしたらいいかがわからず右往左往しておりました。

rubyに親しくないためコードを読むことを半ば放棄していましたが、きちんと読みなおそうと思います。

回答ありがとうございました。

2010/03/01 10:56:55

その他の回答(3件)

id:km1967 No.1

km1967回答回数541ベストアンサー獲得回数402010/02/27 07:14:43

ポイント10pt

swfmillではなImageMagickの使い方を教えろ

という質問かな?

id:res01

結果としてflashlite1.1のgif画像データを置換できれば何でも構いません。

お恥ずかしい話ですが、先のURLに書かれているrubyのコードがimagemagickを使って何をしているかを理解出来ていません。

そこを教えていただけると助かります。

2010/02/28 18:07:24
id:km1967 No.2

km1967回答回数541ベストアンサー獲得回数402010/02/28 23:04:27

ポイント10pt

先のURLに書かれているrubyのコードがimagemagickを使って何をしているかを理解出来ていません

ごめん

その程度のスキルの人に、文字だけで教えるのは難しいわ・・・

id:res01

ご回答ありがとうございます。

精進します。

2010/03/01 10:52:03
id:Watson No.3

Watson回答回数5ベストアンサー獲得回数32010/03/01 05:25:25ここでベストアンサー

ポイント50pt

GIF や PNG は SWF の独自ビットマップ形式 DefineBitsLossless2 で保持する必要があり、

imagemagickを使用して画像データを取得した後、ピクセル単位で処理して DefineBitsLossless2 に

変換しているようです。

変換している箇所は

http://github.com/tmtysk/swfmill_ruby/blob/master/lib/swf.rb

の 211 行目からの def self.image2xml(object_id, image) で行っているようです。

DefineBitsLossless2 のアルゴリズムを知らないため、詳しい処理はよくわかりませんでした。

あとXMLに保存するときにはノード名をDefineBitsJPEG2 -> DefineBitsLossless2 に変換して

保存しているのかな、と思います。

id:res01

>DefineBitsLossless2 のアルゴリズムを知らないため、詳しい処理はよくわかりませんでした。

同じく詳しい処理が良くわからないため、PHPで実現する際に何をしたらいいかがわからず右往左往しておりました。

rubyに親しくないためコードを読むことを半ば放棄していましたが、きちんと読みなおそうと思います。

回答ありがとうございました。

2010/03/01 10:56:55
id:Watson No.4

Watson回答回数5ベストアンサー獲得回数32010/03/01 19:05:26

ポイント50pt

http://github.com/tmtysk/swfmill_ruby/blob/master/lib/swf.rb

の処理をもう少し書いておきます。

・218〜231行

 1ピクセルごとデータをチェックしていき画像で使用している色数をカウントしています。

・234〜267行

 チェックした色数に応じてformat-5かformat-3のデータを生成。

・269〜272行

 ビットマップデータをZLIB圧縮。

DefineBitsLossless2 のフォーマットは下のサイトなどで見つかりました。

フォーマットをみてから、rubyの処理を見直せばそれほど難しいことはしてなさそうなので

がんばってください。

id:res01

結局、phpのGDライブラリ側で透過gif画像をjpgに重ねあわせて一枚にすることで解決としました。

ご丁寧に指南いただき本当にありがとうございました。rubyの方もせっかくなのできちんと読んでみます。

2010/03/04 09:29:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません