这里有一个很好的示例,说明如何从文件中获取图像的尺寸:https://stackoverflow.com/a/12164026/258483
该方法使用ImageReader
,如果不需要,它会尝试不读取整个图像。
是否有类似的方法来获取图像的色深,彩色图像为3,黑白图像为1?
我发现这可能是ImageReader
方法。这是正确的方法吗?
是,
您可以使用ImageReader#getRawImageType(int)
。这种方法大多数时候都可以使用。不幸的是,在某些情况下它会返回ImageReader#getRawImageType(int)
,尤其是对于编码为YCbCr(而不是RGB)的JPEG图像而言,这可能是JPEG最常见的情况...
获得相同信息的另一种方法是使用图像元数据对象,并查看标准元数据格式以获取此信息:
imageReader.getRawImageType(imageNo)
您可以查看null
和IIOMetadata metadata = imageReader.getImageMetadata(imageNo);
if (metadata.isStandardFormatSupported()) { // true for all bundled formats
IIOMetadataNode root = (IIOMetadataNode) imageMetadata.getAsTree("javax_imageio_1.0");
// Get either (as pseudo-xpath):
// /Chroma/NumChannels[@value], which is just number of channels, 3 for RGB
// /Data/BitsPerSample[@value], bits per sample, typically 8,8,8 for 24 bit RGB
}
了解更多信息。
花了一些时间弄清楚这一点,并喜欢与他人分享。这是Jruby调用Java方法,但是逻辑是相同的。元数据格式定义为standard format documentation。
IIOMetadataNode
API doc