[英]Loading JPEG2000 Images using JAI
我想使用Java JAI加載jpeg2000圖像(.jp2)。
我已經使用了仍支持jpeg2000的舊版JAI。 我從scihub.copernicus.eu下載了這些圖像。 這些文件很大(最大100 MB)。 我嘗試了幾種不同的方法:
使用Java,標准方式如下:
public class Main { public static void main(String[] args) throws IOException { String path = "C:\\\\temp\\\\B2.jp2"; File inputFile = new File(path); Image result = ImageIO.read(inputFile); } }
以下堆棧跟蹤發生異常:
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
我期望得到JPEP2000文件的BufferedImage。
這是JAI加載圖片的默認方式。
public class Main { public static void main(String[] args) throws IOException { String path = "C:\\\\temp\\\\B2.jp2"; File inputFile = new File(path); RenderedOp image = JAI.create("fileload", inputFile.getPath()); Image result = image.getAsBufferedImage(); } }
但是,變量圖像不包含任何數據: 方法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或其他任何提供的庫? 您的代碼是什么樣的?
我認為“問題”是您嘗試讀取的特定文件。 並不是太大的文件,而是“盒子”大小之一。
JPEG 2000文件格式基於ISO基本媒體文件格式(ISO BMFF) ,這是一種由“盒子”數據組成的容器格式。 您的特定JPEG 2000文件似乎包含JJ2000的原始作者(JAI和大多數(如果不是全部)基於Java的解碼器所基於的Java JPEG 2000參考實現)的“框”類型(具有擴展長度的框)。 不必費心去支持 (或者,在文件的這一部分中實際上不允許這種類型的框,我沒有詳細閱讀規范)。
使用JPEG 2000或其他(本機)實現的本機JAI插件可能會更好。
由於ISO BMFF有充分的文檔說明,因此有可能可以修復或打補丁JAI FileFormatReader
類以支持這些擴展框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.