首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JAI加载JPEG2000图像

用JAI加载JPEG2000图像
EN

Stack Overflow用户
提问于 2018-12-21 08:59:17
回答 1查看 1.1K关注 0票数 0

我想使用Java加载一个jpeg2000映像(.jp2)。

我已经使用了一个旧的JAI版本,它仍然支持jpeg2000。我从scihub.copernicus.eu下载了这些图片。这些文件相当大(高达100 MB)。我尝试了几种不同的方法:

  1. 对于java,标准的方式是这样工作的: 公共类Main {公共静态空主(String[] args)抛出IOException { String = "C:\temp\B2.jp2";文件inputFile =新文件(路径);图像结果= ImageIO.read(inputFile);}}

异常发生在以下堆栈跟踪中:

代码语言:javascript
复制
    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文件。

  1. 这是JAI加载图片的默认方式。 公共类Main {公共静态空主(String[] args)抛出IOException {String[]= "C:\temp\B2.jp2";文件inputFile =新文件(路径);RenderedOp图像=JAI.create(“文件”,inputFile.getPath();图像结果= image.getAsBufferedImage();})

但是,变量映像不包含任何数据:

方法getAsBufferedImage()引发以下异常:

代码语言:javascript
复制
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或任何其他?你的代码是什么样子的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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类以支持这些扩展框。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53881800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档