К сожалению, я сталкивался с множеством стандартных файлов JPEG с нарушением.ImageIO особенно требователен и часто отказывается загружать изображения, которые часто загружаются и, по-видимому, корректно отображаются другим программным обеспечением с менее строгими проверками формата файла.
Это не очень красиво, но один из способов - использовать OracleВстроенный в JPEG внутренний декодер JPEG (com.sun.image.codec.jpeg.JPEGCodec), так как он, как представляется, допускает больше спецификационных отклонений в качестве оболочки ImageIO:
BufferedImage img =
JPEGCodec.createJPEGDecoder(inputStream).decodeAsBufferedImage();
Это, конечно, не идеальное решение,поскольку использование классов, специфичных для реализации, заблокирует вас для конкретного поставщика ВМ и может порвать с более новыми версиями ВМ, но если вы будете использовать программное обеспечение только в контролируемой среде, это может оказаться лучше, чем отсутствие решения вообще.