Dellows News

NTTレゾナントテクノロジー、JPEG XL対応のJavaライブラリ公開

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

開発の背景と従来の課題

次世代画像フォーマットであるJPEG XL(ISO/IEC 18181)は、高圧縮・高画質に加え、可逆/非可逆圧縮、HDR・広色域、アルファチャンネル、既存JPEGの可逆再圧縮までを1つのフォーマットでカバーします。2023年にSafariが正式サポートし、ChromeやFirefoxでも対応が進むなど、採用判断に備えるべきフェーズに入っています。

一方でJava標準ライブラリはJPEG XLに対応しておらず、従来の現実的な選択肢はC++製リファレンス実装(libjxl)をJNI経由で呼び出す方式でした。しかし、この方式にはOSやCPUアーキテクチャごとにネイティブバイナリを用意・配布する運用負荷や、ネイティブコードのクラッシュや脆弱性がJVMプロセス全体に波及するリスク、外部からアップロードされた画像など信頼できない入力を扱うサーバー用途での障害範囲の大きさといった課題が存在していました。

RustとWebAssemblyによる安全性と可搬性

jxl-javaは、これらの課題を「Rust × WebAssembly × Chicory AOT」という構成で解決しています。Google Researchが開発したRust製JPEG XLデコーダー jxl-rs をWebAssemblyにコンパイルし、WebAssemblyランタイム Chicory のAOTコンパイラでビルド時にJavaバイトコード(classファイル)へ事前変換しています。実行時にはネイティブライブラリもJNIも一切使用せず、配布物はJARのみで、OS・CPUアーキテクチャを問わず動作します。

また、デコーダー本体はメモリ安全なRustで書かれ、さらにJVM内のWebAssemblyサンドボックス内で実行されます。不正な入力による異常はJVMプロセスを巻き込まず、Javaの例外として隔離されるため、信頼できない入力を扱う用途に適した設計となっています。

導入の容易さと実用面での機能

ImageIOのService Provider Interfaceにより自動登録されるため、初期化コードは不要です。JARをクラスパスに置くだけで、従来のJava読み込みコードでそのままJPEG XLに対応できます。実用面においては、以下の特徴を備えています。

  • ピクセル変換の最小化:デコーダーは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を提供し、既存の依存関係との衝突を防ぎます。

適した用途と動作環境

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

動作環境は以下の通りです。

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

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

GitHub: https://github.com/nttr-tech/jxl-java

本記事はNTTレゾナントテクノロジー株式会社の発表をもとに作成されています。

アクセスランキング

今日

1週間