Alchemy – asynchronous jpeg encoding の最速と噂の jpegencoder を試してみました。
pngencoder とは違い Flex ソースコードがついているのでかなり分かりやすい、ホントに感謝です。
Alchemy – asynchronous jpeg encoding では ActionScript で JPEG 画像を生成できる Flash ライブラリを比較しています。
だんとつで Alchemy jpegencoder が速いという結果になっています。
swc ファイル用ソースコードもダウンロードできるように用意してくれています。
swcを作るには jpeg-6b がいるようで添付されており、make install
する必要があります。
ただ、jpeg-6b の configure
ファイルがなぜか CR/LF
になっていたので LF
に変更しました。
cd DOUNLOAD_FILE_DIRECTORY/jpeg-6b su ./configure make make test make install exit cd ../ alc-on gcc -Wall -Ijpeg-6b -swc -O3 jpegencoder.c -o jpegencoder.swc -Ljpeg-6b -ljpeg -L. alc-off |
もっとも Flex ソースには jpegencode.swc
がついているのでワザワザ make install
する必要はありません。
Alchemy swc のクラスインスタンスを作成する手順は次のようです。
/** * Alchemy swc のクラスをインポート * cmodule.{CLASS_NAME}.CLibInit * */ import cmodule.jpegencoder.CLibInit; // インスタンス作成 // var clib_init : cmodule.{CLASS_NAME}.CLibInit = new cmodule.{CLASS_NAME}.CLibInit(); var clib_init : cmodule.jpegencoder.CLibInit = new cmodule.jpegencoder.CLibInit(); var instance : Object = clib_init.init(); |
画面上に配置したPNG画像をキャプチャしてJPEGに変換し保存する、までのswfファイルを作成しました。
jpegencoder.swc のJPEG変換メソッドは、非同期(encodeAsync)と同期(encode)の2種類あります。
非同期(encodeAsync)の場合は第一引数にエンコード終了(コンプリート)時に実行する関数を指定できます。
速度は同期が非同期の数倍速いらしいです。
保存には flash.net.FileReference
を使用しているので以前のようにPHPファイルは使っていません。
[swfobj src=”/20090612alchemy_jpegencode/JPEGEncodeGumbo.swf” width=”550″ height=”300″ id=”JPEGEncodeGumbo” name=”JPEGEncodeGumbo” align=”none” allowfullscreen=”false” required_player_version=”10.0.0″]
Flash Builder 4 Beta + Flex SDK 4.0.0
ソースを見るのリンクが間違っていました。
ソースはコチラにあります。
Flex Builder は買ったけどほとんど使っていませんでした。
コード補完がボヨヨンなのが使う気になれなかった理由なのですが、Flash Builder 4 Beta はかなりゴキゲンです。
TextMate よりいいなと思い始めています。
【追記】
Flex Builder, Flash Builder って Flash で言うパブリッシュなことに「ソースコードを表示」が選べるのですね、知らなかった、知らなすぎ 😳
しかもちゃんとzipファイルも作ってくれてるなんてステキすぎる。
Flash Builder も SDK に 3.4.0 を選べば Flash Player 9 コンテンツが作成できるのかな。
Beta がとれたらちゃんと買おう。
近頃の Adobe はムダにアップグレードを繰返しているような気がしてましたが Flash Builder は久々の must buy みたいです。
Alchemy 版 AS の開発が次の課題だな、これは気が重い。
update 2009-06-24
ByteArray.org の最適化された JPEGEncoder はかなり優秀なようです。
Alchemy 版の同期関数と比べると2倍の時間がかかるようですが、非同期エンコードの比較だと約3倍の早さでエンコードしてしまいます。
使うなら Alchemy 版の同期関数になるのでしょうが、処理完了を通知するが必要かあるかどうかで選択しないといけないようです。
ピンバック: イナヅマtvログ » AS3, 画面をキャプチャして画像生成(JPG,PNG)
ピンバック: イナヅマtvログ » Actionscript 3, JPEG 画像作成の選択肢
ピンバック: イナヅマtvログ » キャプチャしたByteArrayをBitmapDataへ変換し再利用