2

JAI を使用して JPEG 画像を読み込んでいるときに、例外が発生しました。

原因: com.sun.media.jai.codecimpl.util.ImagingException: 画像ストリームを処理できません。形式が正しくありません。... 43 以上 原因: com.sun.image.codec.jpeg.ImageFormatException: JPEG ファイルではありません: sun.awt.image.codec.JPEGImageDecoderImpl.readJPEGStream(Native Method) で 0xff 0xd9 で始まります

16 進数を見ると、実際には、ファイル ストリームの末尾のかなり上に 0xff 0xd9 ブロックがあります。ウィキペディアによると:

EOI 0xFF、0xD9 なし 画像の終わり

ただし、このファイルを任意の画像エディターで開くことができることはわかっています。paint.net エディタで 95% の圧縮率で再保存すると、ブロックが消えます (このブロックはヘッダーにあり、保存時に paint.net がヘッダーを書き換えるためだと思います)。

簡単なバイトチェックで検出できることはわかっています https://stackoverflow.com/a/10069478/51841

どちらかありますか

  • 残りの JAI にとって問題にならないように、Java で画像を開いて再保存する方法 (最後に RenderedOp を取得するなど)
  • このヘッダーにもかかわらず、JAI に画像を読み取らせる方法 (ほとんどの画像リーダーが行うように)
  • そのバイナリ ブロックを変更する安全な方法 (つまり、別のブロックに置き換える)

または、私が見逃しているこの問題について、誰かがこれ以上の洞察を持っていますか?

4

0 に答える 0