Как получить правильную глубину изображения с помощью Python и Wand?

Я не большой гуру сжатия изображений, но я ищу глубину изображения. Фрагмент Python ниже показывает глубину изображения 8, но другие (более надежные) методы показывают, что глубина на самом деле равна 32.

url="http://lesschwab.com/images/product-wizard-ad-tires.png"
width=177, height=177, depth=8, type=truecolormatte, colorspace=srgb

Я подозреваю, что множитель основан на количестве каналов, цветовом пространстве или чем-то еще. Как найти или рассчитать фактическую глубину изображения?

#!/usr/bin/env python
from __future__ import print_function
import sys
import requests
from wand.image import Image

def main():
url = 'http://lesschwab.com/images/product-wizard-ad-tires.png'
resp = requests.get(url, timeout=5.0, headers={'User-agent': 'Mozilla/4.0'})
if resp.status_code == 200:
    try:
        with Image(blob=resp.content) as img:
            print ('url="%s"' % url)
            print('width=%d, height=%d, depth=%d, type=%s, colorspace=%s' %
                  (img.width, img.height, img.depth, img.type,               
                   img.colorspace))
    except Exception as ex:
        print('Unable to decode this image (%d bytes) format.' % 
              len(resp.content), str(ex))

if __name__ == '__main__':
    sys.exit(main())

EDIT: Дополнительная информация:

Я использую один и тот же код py для чтения всех возможных типов изображений, которые могут возникнуть в Интернете, поэтому мне приходится делать это программно. Для этого конкретного изображения я вижу значения 8 в img.channel_depths['red'], img.channel_depths['green'], img.channel_depths['blue'] и img.channel_depths['alpha'], но есть Еще 15 ключей глубины канала, и все они имеют значения. Я предполагаю, что цветовое пространство «sRGB» подразумевает отображение глубины альфа-, красного, зеленого и синего каналов. К сожалению, существует 34 варианта цветового пространства:

('undefined', 'rgb', 'gray', 'transparent', 'ohta', 
 'lab', 'xyz', 'ycbcr', 'ycc', 'yiq', 'ypbpr', 'yuv', 'cmyk', 
 'srgb', 'hsb', 'hsl', 'hwb', 'rec601luma', 'rec601ycbcr', 
 'rec709luma', 'rec709ycbcr', 'log', 'cmy', 'luv', 'hcl', 
 'lch', 'lms', 'lchab', 'lchuv', 'scrgb', 'hsi', 'hsv', 
 'hclp', 'ydbdr') 

и 19 возможных ключей глубины канала:

['opacity', 'true_alpha', 'gray', 'rgb_channels', 
'yellow', 'sync_channels', 'default_channels', 'alpha', 
'cyan', 'magenta', 'undefined', 'blue', 'index', 
'gray_channels', 'composite_channels', 'green', 
'all_channels', 'black', 'red']

Я надеюсь найти таблицу сопоставления между типом сжатия/цветовым пространством и соответствующей им глубиной канала (или, может быть, просто множителем глубины для каждого цветового пространства).


person WigglyWorld    schedule 24.03.2015    source источник
comment
Вам просто нужно сложить элементы массива channel_depth[] - в данном случае 4x8=32   -  person Mark Setchell    schedule 25.03.2015
comment
В массиве channel_depth намного больше 4 элементов, и если я сложу все элементы, будет намного больше 32. Я нашел флаг T/F img.alpha. Я предполагаю, что если цветовое пространство «rgb» или «srgb», то я добавляю channel_depths только для «красного», «зеленого» и «синего». Если img.alpha истинно, я также добавляю channel_depth['alpha']. Тот же принцип для других цветовых пространств («cmy», «cmyk», «grey»). Думаю, я проведу несколько эмпирических тестов, найду общие цветовые пространства и посмотрю, как это работает.   -  person WigglyWorld    schedule 25.03.2015
comment
Лично я не использую интерфейс Python, но мне очень трудно поверить, что вам нужно смотреть на цветовое пространство, чтобы определить битовую глубину - они довольно независимы друг от друга.   -  person Mark Setchell    schedule 25.03.2015
comment
Провел несколько тестов. Вы правы - цветовое пространство не связано. Геттер python Wand всегда возвращает глубину 8 для всего.   -  person WigglyWorld    schedule 26.03.2015


Ответы (1)


Если вы запустите ImageMagick из командной строки таким образом, вы увидите, что у него есть 4 канала (RGB и Alpha), каждый из которых 8-битный, поэтому это фактически 32-битное изображение.

identify -verbose http://lesschwab.com/images/product-wizard-ad-tires.png

Вывод

Image: product-wizard-ad-tires.png
  Base filename: product-wizard-ad-tires.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 177x177+0+0
  Units: Undefined
  Type: TrueColorAlpha
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    alpha: 8-bit
  Channel statistics:
    Pixels: 31329
    Red:
      min: 0 (0)
      max: 255 (1)
      mean: 108.834 (0.426799)
      standard deviation: 75.2048 (0.294921)
      kurtosis: -0.693513
      skewness: 0.588717
      entropy: 0.919078
    Green:
      min: 0 (0)
      max: 255 (1)
      mean: 109.384 (0.428956)
      standard deviation: 75.446 (0.295867)
      kurtosis: -0.710338
      skewness: 0.57681
      entropy: 0.91832
    Blue:
      min: 0 (0)
      max: 255 (1)
      mean: 111.959 (0.439056)
      standard deviation: 75.1161 (0.294573)
      kurtosis: -0.750359
      skewness: 0.529271
      entropy: 0.920621
    Alpha:
      min: 0 (0)
      max: 255 (1)
      mean: 207.428 (0.813445)
      standard deviation: 98.4505 (0.38608)
      kurtosis: 0.611796
      skewness: 1.60878
      entropy: 0.117561
  Image statistics:
    Overall:
      min: 0 (0)
      max: 255 (1)
      mean: 94.4371 (0.370342)
      standard deviation: 81.6743 (0.320291)
      kurtosis: -0.337738
      skewness: 0.734059
      entropy: 0.718895
  Alpha: srgba(255,255,255,0)   #FFFFFF00
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Background color: white
  Border color: srgba(223,223,223,1)
  Matte color: grey74
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 177x177+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    date:create: 2015-03-24T22:17:04+00:00
    date:modify: 2015-03-24T22:17:04+00:00
    png:IHDR.bit-depth-orig: 8
    png:IHDR.bit_depth: 8
    png:IHDR.color-type-orig: 6
    png:IHDR.color_type: 6 (RGBA)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 177, 177
    png:sRGB: intent=0 (Perceptual Intent)
    png:text: 1 tEXt/zTXt/iTXt chunks were found
    signature: 6a14a3fd98dcf5dc10b846c51331b384c5f50cf55694f104961c476aae87c418
    Software: Adobe ImageReady
  Artifacts:
    filename: http://lesschwab.com/images/product-wizard-ad-tires.png
    verbose: true
  Tainted: False
  Filesize: 60.1KB
  Number pixels: 31.3K
  Pixels per second: 0B
  User time: 0.000u
  Elapsed time: 0:01.000
  Version: ImageMagick 6.9.0-10 Q16 x86_64 2015-03-10 http://www.imagemagick.org
person Mark Setchell    schedule 24.03.2015