簡體   English   中英

從Java中的非常大的圖像文件中讀取區域

[英]Read region from very large image file in Java

是否有一個Java庫可以讀取非常大的圖像(例如JPEG)文件(> 10,000 x 10,000像素)的區域,而不會將整個圖像保留在內存中。

或者,哪個Java庫能夠以最小的開銷處理非常大的圖像文件。

標准ImageIO允許您讀取(大)圖像的區域,而無需先將整個圖像讀入存儲器。

Rectangle sourceRegion = new Rectangle(x, y, w, h); // The region you want to extract

ImageInputStream stream = ImageIO.createImageInputStream(input); // File or input stream
Iterator<ImageReader> readers = ImageIO.getImageReaders(stream);

if (readers.hasNext()) {
    ImageReader reader = readers.next();
    reader.setInput(stream);

    ImageReadParam param = reader.getDefaultReadParam();
    param.setSourceRegion(sourceRegion); // Set region

    BufferedImage image = reader.read(0, param); // Will read only the region specified
}

例如,您可以使用RandomAccessFile從文件中間讀取:但問題是整個jpeg圖像在DCT量化后被壓縮( http://www.fileformat.info/mirror/egff/ch09_06.htm ),所以我認為沒有將整個文件讀入內存就可以讀取片段。

您可以使用BufferedImage來執行您需要的操作。

// Set these variables according to your requirements
int regionX, regionY, regionWidth, regionHeight;    

BufferedImage image = ImageIO.read(new File("/path/to/image.jpg"));
BufferedImage region = image.getSubimage(regionX, regionY, regionWidth, regionHeight);

然后您可以根據需要處理區域子圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM