我有一個字節數組(byte[] imgData
)中的圖像數據。我想獲得它的元數據,例如:從字節[]提取圖像元數據
- 尺寸
- 彩色/黑白&白
- 文件類型(JPEG,PNG,...)
- ...
我該怎麼做?如果有一個我必須知道的圖書館,請告訴我。我發現Getting metadata from JPEG in byte array form但它說它與JPEG圖像有關。我想爲所有圖像做到這一點。另外,它沒有解釋它是如何工作的。
我有一個字節數組(byte[] imgData
)中的圖像數據。我想獲得它的元數據,例如:從字節[]提取圖像元數據
我該怎麼做?如果有一個我必須知道的圖書館,請告訴我。我發現Getting metadata from JPEG in byte array form但它說它與JPEG圖像有關。我想爲所有圖像做到這一點。另外,它沒有解釋它是如何工作的。
不幸的是,支持所有想像中的圖像格式(或將要被考慮的)是不實際的。有太多了。使用標準的J2SE,我們可以滿足從ImageIO.getReaderFileSuffixes()
獲得的String[]
中返回的類型。如this answer所示。
將Java高級映像添加到運行時爲映像格式(包括TIFF)添加支持(通過服務提供程序接口)。
感謝您的答案。我很抱歉,但這怎麼回答我的問題?只是爲了澄清,我不是在尋找「每一種形式的圖像格式」。只是更多使用的就足夠了。 –
順便說一句,downvote不是從我! –
爲此,您可以使用普通的ImageIO:
ImageInputStream stream = ImageIO.createImageInputStream(new ByteArrayInputStream(imgData); // assuming imgData is byte[] as in your question
Iterator<ImageReader> readers = ImageIO.getImageReaders(stream);
if (!readers.hasNext()) {
// We don't know about this format, give up
}
ImageReader reader = readers.next();
reader.setInput(stream);
// Now query for the properties you like
// Dimensions:
int width = reader.getWidth(0);
int height = reader.getHeight(0);
// File format (you can typically use the first element in the array):
String[] formats = reader.getOriginatingProvider().getFormatNames();
// Color model (note that this will return null for most JPEGs, as Java has no YCbCr color model, but at least this should get you going):
ImageTypeSpecifier type = reader.getRawImageType(0);
ColorModel cm = type.getColorModel();
// ...etc...
對於你可能想看看IIOMetadata
更高級的屬性,但我發現,大部分的時間我不需要它(和API是太麻煩了)。
正如Andrew所說,您仍然僅限於ImageIO.getReaderFileSuffixes()
所列的格式。您可能需要爲特定格式添加插件。
你是否找到了你的問題的答案? – feisal
@feisal對不起,這是一箇舊項目。不知道我如何(如果)我做到了。我會嘗試通過我的代碼存檔並找到它,但不知道它需要多長時間 –