如何获取图像(在文件中)的通道数(色深)?

问题描述 投票:1回答:2

这里有一个很好的示例,说明如何从文件中获取图像的尺寸:https://stackoverflow.com/a/12164026/258483

该方法使用ImageReader,如果不需要,它会尝试不读取整个图像。

是否有类似的方法来获取图像的色深,彩色图像为3,黑白图像为1?

我发现这可能是ImageReader方法。这是正确的方法吗?

java image javax.imageio color-depth
2个回答
1
投票

是,

您可以使用ImageReader#getRawImageType(int)。这种方法大多数时候都可以使用。不幸的是,在某些情况下它会返回ImageReader#getRawImageType(int),尤其是对于编码为YCbCr(而不是RGB)的JPEG图像而言,这可能是JPEG最常见的情况...

获得相同信息的另一种方法是使用图像元数据对象,并查看标准元数据格式以获取此信息:

imageReader.getRawImageType(imageNo)

您可以查看nullIIOMetadata 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 } 了解更多信息。


0
投票

花了一些时间弄清楚这一点,并喜欢与他人分享。这是Jruby调用Java方法,但是逻辑是相同的。元数据格式定义为standard format documentation

IIOMetadataNode API doc
© www.soinside.com 2019 - 2024. All rights reserved.