2013-10-30 58 views
0

我一直在使用java.mageio.stream api讀取一個gif圖像作爲ImageInputStream。有沒有辦法可以解析器「手動」流,以找到圖像描述符塊的開始索引位置?根據Gif文檔,圖像分隔符 - 標識圖像描述符的開始,固定值0x2C。我一直在讀取流的每個字節並將其與「0x2c」值進行匹配,但顯然這是不正確的,因爲有「屬性」多於一個字節值。 我正在嘗試手動執行此操作,因爲我正試圖避免在此時加載整個圖像。 任何想法都會比歡迎。 在此先感謝Gif圖像描述符索引

+0

不知道你爲什麼想要這樣做,但它肯定是可行的,如果你知道GIF格式和它用來存儲數據的結構。閱讀http://www.w3.org/Graphics/GIF/spec-gif89a.txt。簡單地搜索「0x2c」將不起作用。 – haraldK

+0

PS:爲什麼不使用'ImageIO'和'ImageReader.getImageMetadata()'?它會在沒有閱讀圖像的情況下提供大部分信息。有沒有從你需要的GIF的任何具體信息,你無法從中獲得?你還沒有說*你爲什麼要讀圖像描述符。 – haraldK

+0

@haraldH基本上我需要得到正確的圖像高度和寬度。我最終使用了ImageReader.getHeight()和ImageReader.getWidth()方法,根據文檔只讀取Image inputStream中的必要信息。我會嘗試你的建議也謝謝。 – user1479847

回答

1

只是爲了提供一個答案,因此我們可以將其標記爲回答:

不用手動解析GIF結構,從Java中的GIF圖像描述符獲取數據的最簡單的方法是使用ImageIO的。

對於像圖像的寬度和高度簡單的值,則可以使用上ImageReader這樣相應的方法:

ImageInputStream stream = ImageIO.createImageInputStream(gif); // gif is File or InputStream 
ImageReader reader = ImageIO.getImageReaders(stream).next(); 
reader.setInput(stream); 
int w = reader.getWidth(0); 
int h = reader.getHeight(0); 

有關GIF的更多信息,可以使用:

IIOMetadata metadata = reader.getImageMetadata(0); 

對於原始元數據格式,有關標準(格式中性)元數據格式,請參閱GIF metadata,請參閱standard metadata