2010-01-03 14 views
5

Voglio recuperare la profondità di bit per un file jpeg usando Python.Come posso ottenere la profondità di un file jpg?

Utilizzando la Python Imaging Library:

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

Tuttavia, questo mi dà una profondità di 8 per un'immagine, ovviamente a 24 bit. Sto facendo qualcosa di sbagliato? C'è un modo per farlo con codice Python puro?

Grazie in anticipo.

Modifica: è data.bits non data.depth.

+0

Sei sicuro di utilizzare la funzione corretta? Non sono riuscito a trovare la profondità nel manuale del PIL e forse il valore restituito di 8 è ancora corretto - potrebbe rappresentare "8 bit per pixel". – schnaader

+0

Sì, è 8 bpp. Ciò che non era ovvio (per me) era che era per ogni gruppo come da risposta di Mike. – needthehelp

risposta

8

Non vedo l'attributo depth documentato in nessuna parte dello Python Imaging Library handbook. Tuttavia, sembra che sia supportato solo un numero limitato di modes. È possibile utilizzare qualcosa di simile:

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] 
5

I file Jpeg non hanno la profondità di bit nello stesso modo dei file GIF o PNG. La trasformazione utilizzata per creare i dati Jpeg rende uno spettro di colori continuo sulla decompressione.

3

PIL sta segnalando profondità di bit per "banda". Io in realtà non vedo depth come proprietà documentato nella documentazione Pil, tuttavia, penso che si desidera che questo:

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

O meglio ancora:

data.mode 

Vedi here per maggiori informazioni.

1

Stavo per dire che le immagini JPG sono 24 bit per definizione. Normalmente sono costituiti da tre canali di colore a 8 bit, uno per ciascuno dei colori rosso, verde e blu che producono 24 bit per pixel. Tuttavia, ho appena trovato this page che afferma:

Se si utilizza una versione più moderna di Photoshop, noterete che vi permetterà anche di lavorare in 16-bit per canale, che ti dà 48 bit per pixel.

Ma non riesco a trovare un riferimento per il modo in cui diresti i due a parte.

Problemi correlati