【问题标题】:How can I get the depth of a jpg file?如何获得 jpg 文件的深度?
【发布时间】:2011-01-01 01:55:51
【问题描述】:

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

使用 Python 图像库:

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

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

提前致谢。

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

【问题讨论】:

  • 您确定您使用的功能正确吗?我在 PIL 手册中找不到深度,也许返回值 8 仍然正确 - 它可以代表“每像素 8 位”。
  • 是的,它是 8 bpp。 (对我而言)不明显的是,根据迈克的回答,每个乐队都是如此。

标签: python jpeg imaging


【解决方案1】:

我在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]

【讨论】:

  • 模式更多这是一本更全的字典: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}
  • 还有一些实验模式:"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
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    或者更好:

    data.mode
    

    请参阅here 了解更多信息。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多