2010年8月25日水曜日

Alchemy使用の画像読み込みライブラリ「ZaaIL」を試さんとす。TIFF、TIFFがぁ・・・

Flashがプラットフォームとしてサポートしている画像フォーマットはJPEG,PNG,GIF,SWFの4つ。この他にど〜しても欲しいものとしてBMP,TIFF,PSDがある。

これらの画像フォーマットの読み込みを行なうライブラリはいくつか存在するようだけれど、どうせならAlchemyを使ってポーティングした高速なライブラリは無いものかと探してみたら、あった。


ZaaLabsさんの「ZaaIL」

Introducing ZaaIL – 40 Image format support for Flash | ZaaLabs

何と読むのだろうか。「ザーイル」?とにかく40以上と鬼のようにサポートするフォーマットが多いライブラリだ。当然その中にはBMP,TIFF,PSDも含まれる。すばらしい。


ライセンス確認

ライブラリを使わせてもらう前に必ず確認しなければならないのはライセンスだ。ZaaILは「DevIL」(デビル?デブアイエル?)というライブラリのポーティングで、DevILはLGPLZaaILはMITライセンスだ。

MITライセンスはソース公開の義務はないので問題ない。LGPLは静的リンクの場合はソース公開の義務があるけれど、動的リンクの場合はソース公開の義務はない。

琴線探査: iPhone用のEXIFライブラリはライセンスがキビシイ!

そこで問題は、FlexでZaaILの動的リンク、つまりRSLができるかどうかだが、できることを確認した。

琴線探査: FlexBuilder4でカスタムのswcライブラリをRSLとして使用するには?

なのでRSL化して使うなら問題はないだろう。


動作テスト

ということで、早速ライブラリをありがたくダウンロードさせていただいた。
ZaaLabs's ZaaIL at master - GitHub

「fb4_workspace」に「ImageConverter」というサンプルアプリケーションがあるので、これをFB4にインポート。ライブラリ本体はlibs/zaail.swcらしい。

難なく起動。テストイメージもありがたくダウンロードさせていただいてお目当てのフォーマットを色々と読み込ませてみた。
ZaaLabs's ZaaIL-TestImages at master - GitHub

読み込みが難しそうなPSDファイルの読み込みもできる。アルファやレイヤーがあっても大丈夫らしい。どれくらいのPSバージョンに完全対応しているかはわからないけれど、かなり読み込める感じ。

raw形式にも対応しているので、もしや?と思い、NIKONのrawファイル「NEF」を読み込ませてみたけど残念ながら撃沈。まぁrawファイルと言っても様々な形式があるので、やっぱり難しい。

ほぼ問題なかったのだけど、一つ残念なことが判明。ファイル選択ダイアログでTIFFが選べない。そこでソースを変更してTIFおよびTIFFも選択できるようにした。

で実際に読み込ませてみると、次のようなエラーが出てTIFFが読み込めない。

Undefined sym: _TIFFSetWarningHandler
 at Function/()
 at Function/()
 at ImageConverter/onFileLoaded()[/Users/jun/Documents/Adobe Flash Builder 4/ImageConverter/src/ImageConverter.mxml:80]

自分で用意したTIFFもダメだった。

おかしいなと思い、もう一度上のZaaLabsさんのページのコメント欄を見ると、同様の症状を見ている人がいることがわかった。さらに見ていくと、どうやらlibtiffをリンクしないでswcをコンパイルしてしまったらしい!

・・・It seems like we forget to link in libtiff to that version of the swc.・・・

あうぅ。さぁ、どうするかなぁ・・・