我想使用Java加载一个jpeg2000映像(.jp2)。
我已经使用了一个旧的JAI版本,它仍然支持jpeg2000。我从scihub.copernicus.eu下载了这些图片。这些文件相当大(高达100 MB)。我尝试了几种不同的方法:
异常发生在以下堆栈跟踪中:
Exception in thread "main" java.lang.RuntimeException: An uncaught runtime exception has occurred
at com.sun.media.imageioimpl.plugins.jpeg2000.J2KReadState.initializeRead(J2KReadState.java:708)
at com.sun.media.imageioimpl.plugins.jpeg2000.J2KReadState.<init>(J2KReadState.java:209)
at com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReader.read(J2KImageReader.java:449)
at javax.imageio.ImageIO.read(ImageIO.java:1448)
at javax.imageio.ImageIO.read(ImageIO.java:1308)
at Main.main(Main.java:16)
Caused by: java.io.IOException: File too long.
at jj2000.j2k.fileformat.reader.FileFormatReader.readFileFormat(FileFormatReader.java:207)
at com.sun.media.imageioimpl.plugins.jpeg2000.J2KReadState.initializeRead(J2KReadState.java:418)
... 5 more我希望得到一个BufferedImage的JPEP2000文件。
但是,变量映像不包含任何数据:

方法getAsBufferedImage()引发以下异常:
Exception in thread "main" java.lang.RuntimeException: - Unable to render RenderedOp for this operation.
at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:827)
at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:867)
at javax.media.jai.RenderedOp.getColorModel(RenderedOp.java:2242)
at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2498)
at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2546)
at Main.main(Main.java:15)任何其他图片格式都能正常工作。您使用什么JAI库来加载JPEG2000文件?Javax或github提供的lib或任何其他?你的代码是什么样子的?
发布于 2019-01-08 16:14:30
我认为“问题”是您正在试图读取的特定文件。并不是文件大小太大,而是其中一个“盒子”大小。
JPEG 2000文件格式基于ISO基本媒体文件格式(ISO BMFF),它是一种由数据的“框”组成的容器格式。您的特定JPEG 2000文件似乎包含一个" box“类型(一个具有扩展长度的框),它是JJ2000 ( JAI和大多数(如果不是全部)基于Java的解码器所基于的JPEG 2000参考实现) 费心支持 (或者,这种类型的框实际上不允许在文件的这一部分中使用,我还没有详细阅读规范)。
对于JPEG 2000的本机JAI插件或其他(本机)实现,您可能会比较幸运。
由于ISO已经有了详细的文档,所以可能会修复或修补JAI FileFormatReader类以支持这些扩展框。
https://stackoverflow.com/questions/53881800
复制相似问题