WEBアプリ開発中、一部画像が読み込めない事象が発生した為、その対策についてメモ。
エラー内容は以下の通り。
java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do not match
どうやらデフォルトのImageIOではサポートされていない形式のjpegだったようで、
ImageIO.read()で読み込むことが出来なかった。
■対処方法
外部ライブラリ(TwelveMonkeys)を使用することで解消。
https://github.com/haraldk/TwelveMonkeys
元々、ImageIOはプラグインベースとなっており、SPIを使用して自動登録される為、
下記のように普段の要領で使用することが出来た。
BufferedImage image = ImageIO.read(jpegFile);
ImageIO.scanForPlugins();
自動的に登録されなかった場合は上記メソッドを一度だけ叩く
導入ライブラリは以下の通り。
twelvemonkeys-common-lang-3.4.1.jar
twelvemonkeys-common-io-3.4.1.jar
twelvemonkeys-common-image-3.4.1.jar
twelvemonkeys-imageio-core-3.4.1.jar
twelvemonkeys-imageio-metadata-3.4.1.jar
twelvemonkeys-imageio-jpeg-3.4.1.jar
webアプリとしてglassfishにデプロイして使用する場合などは以下追加ライブラリが必要となり、web.xmlに記述(後述)が必要となる。
servlet-3.4.1.jar
Mavenを使用する場合は以下のURLを参照。
web.xmlには以下を記述
<web-app>
<listener>
<display-name>ImageIO service provider loader/unloader</display-name>
<listener-class>com.twelvemonkeys.servlet.image.IIOProviderContextListener</listener-class>
</listener>
</web-app>
これで正常に画像を読み込むことが可能となります。
TwelveMonkeysについて日本語のページが無かったため、作成しました。
Leave a Reply