我想使用 Python 检索 jpeg 文件的位深度。
使用 Python 图像库:
import Image
data = Image.open('file.jpg')
print data.depth
但是,对于一个明显的 24 位图像,这给了我 8 的深度。难道我做错了什么?有没有办法用纯 Python 代码做到这一点?
提前致谢。
编辑:这是 data.bits 不是 data.depth。
我在Python Imaging Library 手册中的任何地方都没有看到该depth
属性。但是,似乎只支持有限数量的模式。你可以使用这样的东西:
mode_to_bpp = {'1':1, 'L':8, 'P':8, 'RGB':24, 'RGBA':32, 'CMYK':32, 'YCbCr':24, 'I':32, 'F':32}
data = Image.open('file.jpg')
bpp = mode_to_bpp[data.mode]
Jpeg 文件的位深度与 GIF 或 PNG 文件不同。用于创建 Jpeg 数据的变换在解压缩时呈现连续的色谱。
PIL 报告每个“波段”的位深度。我实际上并没有depth
在 PIL 文档中将其视为已记录的属性,但是,我认为您想要这个:
data.depth * len(data.getbands())
或者更好:
data.mode
请参阅此处了解更多信息。
我要说 JPG 图像按照定义是 24 位的。它们通常由三个 8 位颜色通道组成,红色、绿色和蓝色各一个,每个像素为 24 位。但是,我刚刚发现此页面指出:
如果您使用更现代的 Photoshop 版本,您会注意到它还可以让您以每通道 16 位工作,即每像素 48 位。
但是我找不到您如何区分两者的参考。
我认为这就是您要的...您可以使用以下内容来获取 JPG 或其他 RGB 或 RGBA 图像中使用的颜色数
我个人使用此代码的变体来确定从 RGB 转换为索引模式是否有意义。
im = Image.open('/path/to/file.jpg')
depth = len(set(im.getdata()))