11

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

使用 Python 图像库:

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

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

提前致谢。

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

4

5 回答 5

14

我在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]
于 2010-01-03T22:35:40.563 回答
8

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

于 2010-01-03T22:31:22.233 回答
4

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

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

或者更好:

data.mode

请参阅此处了解更多信息。

于 2010-01-03T22:35:46.250 回答
2

我要说 JPG 图像按照定义是 24 位的。它们通常由三个 8 位颜色通道组成,红色、绿色和蓝色各一个,每个像素为 24 位。但是,我刚刚发现此页面指出:

如果您使用更现代的 Photoshop 版本,您会注意到它还可以让您以每通道 16 位工作,即每像素 48 位。

但是我找不到您如何区分两者的参考。

于 2010-01-03T22:48:01.153 回答
0

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

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

im = Image.open('/path/to/file.jpg')
depth = len(set(im.getdata()))
于 2020-04-08T15:59:36.967 回答