En Python, ¿cómo leo los datos exif de una imagen?
Estoy usando PIL. ¿Cómo convierto los datos EXIF de una imagen en un diccionario?
Puede utilizar el _getexif()
método protegido de una imagen PIL.
import PIL.Image
img = PIL.Image.open('img.jpg')
exif_data = img._getexif()
Esto debería proporcionarle un diccionario indexado por etiquetas numéricas EXIF. Si desea que el diccionario esté indexado por las cadenas de nombres de etiquetas EXIF reales, intente algo como:
import PIL.ExifTags
exif = {
PIL.ExifTags.TAGS[k]: v
for k, v in img._getexif().items()
if k in PIL.ExifTags.TAGS
}
Para Python 3.x y el uso de Pillow 6.x y superiores, Image
los objetos ahora proporcionan un getexif()
método "público"/oficial que devuelve una <class 'PIL.Image.Exif'>
instancia o None
si la imagen no tiene datos EXIF.
De las notas de la versión de Pillow 6.0.0 :
getexif()
Se ha agregado, que devuelve unaExif
instancia. Los valores se pueden recuperar y configurar como un diccionario. Al guardar JPEG, PNG o WEBP, la instancia se puede pasar comoexif
argumento para incluir cualquier cambio en la imagen de salida.
Como se indicó, puede iterar sobre los pares clave-valor de la Exif
instancia como un diccionario normal. Las claves son números enteros de 16 bits que se pueden asignar a sus nombres de cadena mediante el ExifTags.TAGS
módulo.
from PIL import Image, ExifTags
img = Image.open("sample.jpg")
img_exif = img.getexif()
print(type(img_exif))
# <class 'PIL.Image.Exif'>
if img_exif is None:
print('Sorry, image has no exif data.')
else:
for key, val in img_exif.items():
if key in ExifTags.TAGS:
print(f'{ExifTags.TAGS[key]}:{val}')
else:
print(f'{key}:{val}')
Para las claves EXIF que aparecen en el ExifTags.TAGS
módulo, debería ver algo como esto:
ExifVersion:b'0230'
...
FocalLength:(2300, 100)
ColorSpace:1
...
Model:'X-T2'
Make:'FUJIFILM'
LensSpecification:(18.0, 55.0, 2.8, 4.0)
...
DateTime:'2019:12:01 21:30:07'
...
Probado con Python 3.8.8 y Pillow 8.1.0.