100% Pure JavaでJPEG XLをデコードするオープンソースライブラリ「jxl-java」を公開

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

NTTレゾナントテクノロジー株式会社

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出力への対応などを検討していきます。

このプレスリリースには、メディア関係者向けの情報があります

メディアユーザー登録を行うと、企業担当者の連絡先や、イベント・記者会見の情報など様々な特記情報を閲覧できます。※内容はプレスリリースにより異なります。

すべての画像


ダウンロード
プレスリリース素材

このプレスリリース内で使われている画像ファイルがダウンロードできます

会社概要

URL
-
業種
情報通信
本社所在地
大手町1-5-1 大手町ファーストスクエア イーストタワー12F
電話番号
03-3525-8977
代表者名
三澤 淳志
上場
未上場
資本金
-
設立
2012年04月