Snow Flower IIO 概要

Snow Flower IIO は JavaFX IIO (Image IO) を拡張するライブラリです。JPEG 2000 や TIFF 画像を JavaFX Image API で直接扱うことができるようになります。JavaFX 標準API から透過的に利用できるので開発者は追加の学習なしに利用できます。

特徴
  • JavaFX の Image API をそのまま利用

  • JPEG デコードの高速化

  • 少ないメモリーでサムネイル画像を生成

  • 対応画像形式の追加

    • TIFF

    • JPEG2000

    • Microsoft ICO

JavaFX Image API の利点

JavaFX Image API には、ロード時にサイズを指定できる機能が備わっています。スケーリングする際に使用するフィルタリングの品質、および元のイメージの縦横比を保持するかどうかをアプリケーションで指定できます。これは javax.imageio.ImageIO にはない機能です。サムネイル画像を生成する場合に JavaFX Image API を使用することで javax.imageio.ImageIO API を使用するよりもメモリーの最大使用量を低く抑えることが出来ます。

対応している画像形式の比較

次の表は Web プラットフォームと JavaFX Image API と Snow Flower IIO の対応画像形式を比較しています。

Table 1. 画像ファイル形式の対応表
Image FormatWebjavafx.scene.image.ImageSnow Flower IIO

JPEG

Yes

Yes

Yes1

BMP

Yes

Yes

Yes

GIF

Yes

Yes

Yes

PNG

Yes

Yes

Yes

TIFF

No

No

Yes

JPEG2000

No

No

Yes

ICO

No

No

Yes

JavaFX 標準のImage API がサポートしている画像形式は Web ブラウザと同等ですが、Snow Flower IIO は JavaFX 標準ランタイムがサポートしていないネイティブアプリで使用されることの多い画像ファイル形式のサポートを追加しています。

Web ブラウザで利用可能な画像ファイル形式は代表的な Webブラウザである Safari、Internet Explorer、Chrome、Firefox で共通して利用できるものに限定しています。

  1. Snow Flower IIO は最もよく使われていると考えられる JPEG ファイル形式のローダーを高速ローダに置き換えています。JavaFX 標準 API サポート対象範囲においても改善を行っています。

JPEGデコードの高速化
JPEGファイルのデコードの際には Snow Flower IIO は JavaFX 標準ランタイムで使用される libjpeg ライブラリの代わりに libjpeg-turbo を使用します。libjpeg-turbo は SIMD (MMX, SSE, SSE2) 最適化によって、libjpeg よりも約2倍から4倍程度高速にデコードします。

API の利用方法

JavaFX の Image API をそのまま利用できます。

画像ファイルのロードの例
import javafx.scene.image.Image;

Image image1 = new Image("sample.jpg");
Image image2 = new Image("sample.jp2");
Image image3 = new Image("sample.tiff");

画像のファイルへの書き出しは JavaFX Image では現在のところサポートがないので AWT/Image(BufferedImage) に変換して javax.imageio.ImageIO を使って出力します。

ファイルへの書き出し例
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

BufferedImage bimg = SwingFXUtils.fromFXImage(fximage, null);
ImageIO.write(bimg, "image/png", new File("out.png"));

動作環境

Snow Flower IIO ライブラリはJavaVM の動作するすべての環境で動作しますが、JPEG のアクセラレーションは次のプラットフォームでのみ有効になります。対応していないプラットフォームでは標準のローダが使用されます。

JPEG 高速化デコーダの有効なプラットフォーム
  • Mac OS X

    • Mac OS X 10.12 Sierra and later. x64

  • Windows

    • Windows 7 and later x86

    • Windows 8 and later x64

  • Linux

    • Linux x86

    • Linux x64