JAI 1.0_01 image/bmp MIME-Type のバグ
JAI をインストールした後に ImageIO.getReaderMIMETypes() で MIME-Type と照らし合わせて処理してみたのだが、どうも image/bmp の形式だけ意図した動きにならないようだ。
ImageIO がサポートしている MIME-Type に image/bmp が含まれていない動きになってしまうのだ。だがその文字列配列をコンソールに出力するとちゃんと image/bmp と表示される。ImageIO.getImageReadersByMIMEType("image/bmp") は有効な要素を一つも返してくれない。だが ImageIO.read() はちゃんと Windows Bitmap も読み込めるというおかしな現象だ。
アレコレ試行錯誤の末、どうも getReaderMIMETypes() が返す文字列に変な空白が入っているのに気付いた。うーん、バグっぽい… ということで BugParade で検索したら、何とこんなことになっていたのだ。
In BMPImageReaderSpi class you have MIME types defined as follows:
private static String mimeTypes[] = {
"image/bmp, image/x-bmp, image/x-windows-bmp"
};
should it be:
private static String mimeTypes[] = {
"image/bmp", "image/x-bmp, "image/x-windows-bmp"
}
。 。
/ / シポーン
( Д )
見ての通り、文字列配列にすべきところを 1 つのリテラルにしてしまっていたのだ (私が気付いた空白は各要素とコンマの間の空白だった)。こりゃ "image/bmp" とじゃ一致しないはずだわ…
BugParade では一応 JAI 1.1β で FIX という事になっている。手元で試したところ 1.0 では発生しない。つまり 1.0_01 固有の問題ということだ。
これは単に MIME-Type に関連する部分のみで、Windows Bitmap 画像の読み込み/書き込みは問題なくできるようだ。ImageIO + JAI で MIME-Type と絡めて扱う場合はちょっと注意が必要。