JavaScriptでJPEGをエンコーディング
Ajaxianより。JavaScriptでJPEGエンコーディングを試してみた人がいました。JavaScriptは基本的にインタプリタなのに関わらず、コンパイラであるActionScriptと比べてそれほど遅くない結果になっています。
方法は
- Canvasタグ(参考)をHTMLに作ってそこにJPEGファイルを取り込むことでデコード
- 2次元配列にいったん変換して再エンコード
- コードそのものはActionScriptのライブラリをJavaScriptに変換。
高速化のためにWebWorkers(スレッドプログラミングができるHTML5のAPI)による並列処理も試みたそうです
WebWorkersはスレッドセーフのため、データの受け渡しは文字列のみに限られるので以下のような方法を試してみたとのこと。
ベンチマーク結果からしますと、残念ながらどうもこのエンコード→デコードプロセスがボトルネックになっていて効果が上がらないみたいです。
また、GoogleChromeはスレッドプログラミング版では落ちたみたいですが、原因はWebWorkerよりも画像のサイズにあるらしく、小さな画像では動作したとのことです。
サンプルページも試してみましたが、動作はかなり軽快で「JavaScriptには巨大なデータを扱う能力が十分にある」という結論も納得できます。