繁体   English   中英

从byte []中提取图像元数据

[英]Extract image metadata from byte[]

我有一个字节数组( byte[] imgData )中的图像数据。 我想获取其元数据,例如:

  • 外型尺寸
  • 彩色/黑白
  • 档案类型(JPEG,PNG等)
  • ...

我怎样才能做到这一点? 如果有我要了解的图书馆,请告诉我。

我发现以字节数组形式从JPEG获取元数据,但是它说它与JPEG图像有关。 我要对所有图像执行此操作。 而且,它没有解释它是如何工作的。

不幸的是,支持曾经设想过(或即将考虑)的每种图像格式都是不切实际的。 太多了。 使用标准的J2SE,我们可以满足从ImageIO.getReaderFileSuffixes()获得的String[]返回的类型。 这个答案中可以看出。

将Java Advanced Imaging添加到运行时可增加对其他图像格式(包括TIFF)的支持(通过服务提供商接口)。

您可以使用常规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() ,您仍然受限于ImageIO.getReaderFileSuffixes()列出的格式。 您可能需要添加特定格式的插件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM