如何获取jpg文件的深度?

11

我想使用Python获取jpeg文件的位深度。

使用Python Imaging Library:

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

然而,这让我得到了一个深度为8的明显是24位图像。我做错了什么吗?有没有用纯Python代码实现的方法?

提前感谢.

编辑:应该使用data.bits而不是data.depth。


你确定你正在使用正确的函数吗?我在PIL手册中找不到深度,也许返回值8仍然是正确的 - 它可能代表“每像素8位”。 - schnaader
是的,它是8 bpp。对我来说不太明显的是,它是根据Mike的答案为每个波段而设定的。 - needthehelp
4个回答

18

我在Python Imaging Library handbook中没有看到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]

1
这是一个更完整的字典,有更多的模式:mode_to_bpp = {"1": 1, "L": 8, "P": 8, "RGB": 24, "RGBA": 32, "CMYK": 32, "YCbCr": 24, "LAB": 24, "HSV": 24, "I": 32, "F": 32} - Mehdi Nellen
还有一些实验模式存在: "I;16": 16, "I;16B": 16, "I;16L": 16, "I;16S": 16, "I;16BS": 16, "I;16LS": 16, "I;32": 32, "I;32B": 32, "I;32L": 32, "I;32S": 32, "I;32BS": 32, "I;32LS": 32 - Mehdi Nellen

7

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


4

PIL报告每个“波段”的比特深度。我在PIL文档中并没有看到“depth”作为一个文档化的属性,然而,我认为你想要这个:

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

或者更好的办法是:
data.mode

请查看这里以获取更多信息。


2
我本来想说JPG图像根据定义是24位的。它们通常由三个8位颜色通道组成,分别为红色、绿色和蓝色,每个像素有24位。然而,我刚刚找到了this page,其中提到:

如果您使用更现代的Photoshop版本,您会注意到它还可以让您使用每个通道16位,这将为您提供每个像素48位。

但我找不到区分两者的参考资料。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接