我怎样才能获得jpg文件的深度?

时间:2010-01-03 22:24:09

标签: python jpeg imaging

我想使用Python检索jpeg文件的位深度。

使用Python Imaging Library:

import Image
data = Image.open('file.jpg')
print data.depth

然而,对于明显的24位图像,这给了我8的深度。难道我做错了什么?有没有办法用纯Python代码做到这一点?

提前致谢。

编辑:这是data.bits而不是data.depth。

5 个答案:

答案 0 :(得分:11)

我没有在Python Imaging Library handbook中的任何位置看到depth属性。但是,看起来只支持有限数量的modes。你可以使用这样的东西:

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]

答案 1 :(得分:6)

Jpeg文件的具有位深度的方式与GIF或PNG文件的方式相同。用于创建Jpeg数据的变换在解压缩时呈现连续的色谱。

答案 2 :(得分:3)

PIL报告每个“波段”的比特深度。我实际上并没有将depth视为PIL文档中的文档属性,但是,我认为您想要这样:

data.depth * len(data.getbands())

或者更好:

data.mode

有关详细信息,请参阅here

答案 3 :(得分:2)

我打算说JPG图像是24位的定义。它们通常由三个8位颜色通道组成,红色,绿色和蓝色各一个,每像素24位。但是,我刚刚发现this page表明:

  

如果您使用更现代的Photoshop版本,您会发现它还可以让您以每个通道16位的速度工作,每个像素可以使用48位。

但我无法找到你如何分辨两者的参考。

答案 4 :(得分:0)

我想这就是您要的...您可以使用以下内容获取JPG或其他RGB或RGBA图像中使用的颜色计数

我个人使用此代码的变体来确定从RGB转换为索引模式是否有意义。

im = Image.open('/path/to/file.jpg')
depth = len(set(im.getdata()))