【JAVA】TwelveMonkeysを使用してImageIO.read問題を解決する

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を参照。

https://mvnrepository.com/artifact/com.twelvemonkeys

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について日本語のページが無かったため、作成しました。

Be the first to comment

Leave a Reply

Your email address will not be published.