JavaのImageIOで読み込めないJPEGファイルがある

画像分類の学習モデルを作るツールをJavaで作っていたのですが、あるJPEGファイルをImageIOで読もうとすると以下のエラーが出ました。

Exception in thread "main" java.awt.color.CMMException: Invalid image format
    at sun.awt.color.CMM.checkStatus(CMM.java:131)
    at sun.awt.color.ICC_Transform.(ICC_Transform.java:89)
    at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:516)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1169)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1137)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:948)
    at javax.imageio.ImageIO.read(ImageIO.java:1422)
    at javax.imageio.ImageIO.read(ImageIO.java:1282)
    at Test.main(Test.java:31

JAIだと読み込めるというので、処理速度が落ちるけどそっちを使うようにしてみた。

BufferedImage img = null;
try {
    img = ImageIO.read(file);
} catch (java.awt.color.CMMException e) {
    img = JAI.create("fileload", file.getAbsolutePath()).getAsBufferedImage();
} catch (IOException e) {
    // ちゃんと処理しようね!
}

正しい使い方としては、JAIをきちんとセットアップしてImageIO経由で使えるようにし、ImageReaderを列挙して順番に試すというのが正統な方法なのかなと。今回は手抜き処理。

JAIだけでも良いんだけど、速度が・・。

参考サイト

 

新しいサイトもよろしくお願いします!