[英]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.