~Rust製デコーダーをWebAssembly経由でJavaバイトコード化、一行でJPEG XLの読み込みに対応~

NTTレゾナントテクノロジー株式会社(本社:東京都千代田区大手町、代表取締役社長:三澤 淳志、以下「当社」)は、次世代画像フォーマットJPEG XLをJava標準の画像入出力API(ImageIO)で読み込めるオープンソースライブラリ「jxl-java」をGitHubにて公開しました。Apacheライセンスで提供され、商用・非商用を問わずに無償でご利用いただけます。
GitHub: https://github.com/nttr-tech/jxl-java

1. 背景:JavaでJPEG XLを扱う「最後の壁」

JPEG XL(ISO/IEC 18181)は、高圧縮・高画質に加え、可逆/非可逆圧縮、HDR・広色域、アルファチャンネル、既存JPEGの可逆再圧縮までを1つのフォーマットでカバーする次世代画像フォーマットです。2023年にSafariが正式サポートし、ChromeやFirefoxでも対応が進むなど、採用判断に備えるべきフェーズに入っています。
一方、Java標準ライブラリはJPEG XLに対応しておらず、従来の現実的な選択肢はC++製リファレンス実装(libjxl)をJNI経由で呼び出す方式でした。この方式には次の課題があります。
- OS・CPUアーキテクチャごとにネイティブバイナリを用意・配布する運用負荷
- ネイティブコードのクラッシュや脆弱性がJVMプロセス全体に波及するリスク
- 外部からアップロードされた画像など、信頼できない入力を扱うサーバー用途での障害範囲の大きさ

「jxl-java」は、この課題を「Rust × WebAssembly × Chicory AOT」という構成で解決します。

2. 技術的特長

(1)100% Pure Java ― JARひとつで全OS・全CPUに配布可能
Google Researchが開発したRust製JPEG XLデコーダー jxl-rs をWebAssemblyにコンパイルし、WebAssemblyランタイム Chicory のAOTコンパイラでビルド時にJavaバイトコード(classファイル)へ事前変換しています。実行時にはネイティブライブラリもJNIも一切使用しません。配布物はJARのみで、OS・CPUアーキテクチャを問わず動作します。
(2)メモリ安全性とサンドボックスによる障害の隔離
デコーダー本体はメモリ安全なRustで書かれ、さらにJVM内のWebAssemblyサンドボックス内で実行されます。不正な入力による異常はJVMプロセスを巻き込まず、Javaの例外として隔離されます。アップロード画像の受け入れなど、信頼できない入力を扱う用途に適した設計です。
(3)導入後のコードは「従来のImageIO」のまま
ImageIOのService Provider Interfaceにより自動登録されるため、初期化コードは不要です。JARをクラスパスに置くだけで、従来のJava読み込みコードでそのままJPEG XLに対応できます。

java



(4)実用性へのこだわり
- ピクセル変換の最小化:デコーダーはWebAssembly内で直接、事前乗算済みBGRAを出力。リトルエンディアンのメモリ配置を利用してARGB intへコピー中心で変換し、Java 2Dが最速で合成できる TYPE_INT_ARGB_PRE の BufferedImage を生成します。
- カラーマネジメント:広色域やICCプロファイル付き画像は ICC_ColorSpace + ColorConvertOp でsRGBへ変換し、表示結果の一貫性を確保。壊れたプロファイルの場合は変換をスキップしてデコードを継続します。
- スレッド安全性:WebAssemblyモジュールの解析はJVMごとに1回。デコードごとに新規WebAssemblyインスタンス(生成はサブミリ秒)を使うため、状態を共有せず安全に並列実行できます。
- 2つの配布形態:通常版JARに加え、Chicoryランタイムを内部パッケージへシェーディングした自己完結型fat JARを提供。アプリケーション側の既存の依存関係と衝突しません。

3. 適した用途

安全性・可搬性を優先する読み込み用途 ― サムネイル生成、アップロード画像の受け入れ、デスクトップ表示、マルチOS配布 ― に適しています。大量バッチ変換や低遅延が最優先の用途や、JPEG XLエンコードには現時点では向きません。

4. 動作環境

- 実行時:Java 11以降
- ビルド時:JDK 21以降 + Rustツールチェーン(wasm32-unknown-unknown ターゲット)

5. 今後について

当社は本ライブラリをオープンソースとしてメンテナンスしていく予定でコミュニティからのIssue・Pull Requestを歓迎します。今後はWasm SIMD対応による高速化、16bit/HDR出力への対応などを検討していきます。
企業プレスリリース詳細へ
PR TIMESトップへ