Pregunta

Quiero recuperar la profundidad de bits para un archivo JPEG usando Python.

Uso de la biblioteca Python Imaging:

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

Sin embargo, esto me da una profundidad de 8 para una imagen, obviamente, de 24 bits. ¿Estoy haciendo algo mal? ¿Hay alguna manera de hacerlo con puro código Python?

Gracias de antemano.

Editar:. Data.bits No es data.depth

¿Fue útil?

Solución

No veo el atributo depth documentado en cualquier parte del Python Imaging Library manual. Sin embargo, parece que sólo un número limitado de modos son compatibles. Usted podría utilizar algo como esto:

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]

Otros consejos

Los archivos JPEG no lo hacen Tienes profundidad de bits de la misma manera como archivos GIF o PNG. La transformación utilizado para crear los datos JPEG rinde un espectro de color continuo en la descompresión.

PIL está informando profundidad de bits por "banda". Yo en realidad no veo depth como una propiedad documentado en la documentación PIL, sin embargo, creo que quieres esto:

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

O mejor aún:

data.mode

aquí para obtener más información.

Me iba a decir que las imágenes JPG son de 24 bits, por definición. Normalmente consisten en tres canales de color de 8 bits, uno para cada uno de la toma de rojo, verde y azul 24 bits por píxel. Sin embargo, me acabo de encontrar esta página que dice:

  

Si utiliza una versión más moderna de Photoshop, se dará cuenta de que también le permitirá trabajar en 16 bits por canal, lo que le da 48 bits por píxel.

Pero no puedo encontrar una referencia de cómo le gustaría diferenciar entre los dos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top