Como sabeis llevo unos días organizando fotografias y le estoy metiendo mano a los metadatos EXIF para clasificarlas.
Editar una fotografía es muy común. Cuando lo único que necesito es reorientarla o hacer un pequeño recorte de un area no me complico y utilizo KolorPaint, una herramienta sencilla y ligera que hace justo lo que necesito.
Sin embargo me he dado cuenta que al guardar, únicamente guarda la imagen, los metadatos EXIF los ignora y por tanto se pierden.
Sabiendo esto ya tengo cuidado y guardo siempre el original.
Sin embargo, recordé que hace poco escribí una pequeña entrada acerca cómo borrar o conservar, según la necesidad, los datos EXIF de una imagen y una cosa llevó a la otra.
¿Puedo CLONAR los EXIF de una foto a otra?
La respuesta es sí, aquí el código:
def exif_clone(fileIN, fileOUT):
try:
image = Image.open(fileIN)
imgexif = image.info['exif']
image2 = Image.open(fileOUT)
image2.save(fileOUT, exif=imgexif)
except:
debug.print_exception()
return None
Primer parámetro imagen de entrada «IN» con los EXIF que quiero clonar en la imagen de salida «OUT».
Las imágenes por supuesto pueden ser distintas y no se reemplazan, únicamente afecta a los metadatos.
Ejemplo de llamada a la función exif_clone()
Tenemos dos archivos de imagen, azul.jpg con metadatos y azul2.jpg sin metadatos, ejecuto exif_clone y copio los metadatos de azul.jpg a azul2.jpg
exif_clone("/media/lubuntu/4A5B-42E5/test/azul.jpg", "/media/lubuntu/4A5B-42E5/test/azul2.jpg")
Puedes comprobar la imagen con los metadatos con cualquier programa de edición de imagen o con la siguiente función:
def exif_print(filename):
try:
image = Image.open(filename)
exif = image._getexif().items()
if exif is not None:
for key, value in exif:
svalue=str(value)[0:100]
print("%s: %s" % (TAGS.get(key, key), svalue))
except:
debug.print_exception()
return None
exif_print("/media/lubuntu/4A5B-42E5/test/azul2.jpg")
GPSInfo: {5: b'\x00', 6: (0, 1000)}
ResolutionUnit: 2
ExifOffset: 194
Make: LG Electronics
Model: LG-M160
Orientation: 1
DateTime: 2018:06:09 18:08:24
YCbCrPositioning: 1
XResolution: (72, 1)
YResolution: (72, 1)
ExifVersion: b'0220'
ComponentsConfiguration: b'\x01\x02\x03\x00'
ShutterSpeedValue: (8854, 1000)
DateTimeOriginal: 2018:06:09 18:08:24
DateTimeDigitized: 2018:06:09 18:08:24
ApertureValue: (260, 100)
BrightnessValue: (0, 100)
ExposureBiasValue: (0, 1)
MeteringMode: 2
Flash: 0
FocalLength: (2660, 1000)
UserComment: b' FM0 FC111011111:zzzzzz0 e 6a 003601e0180120200180 500 3c0 961f4 46 0246 5628a 0 0 0 0 0
ColorSpace: 1
ExifImageWidth: 2560
ExifInteroperabilityOffset: 1729
SceneCaptureType: 0
SubsecTime: 694891
SubsecTimeOriginal: 694891
SubsecTimeDigitized: 694891
ExifImageHeight: 1440
SensingMethod: 0
ExposureTime: (1, 463)
FNumber: (260, 100)
SceneType: b'\x01'
ExposureProgram: 0
ISOSpeedRatings: 50
ExposureMode: 0
FlashPixVersion: b'0100'
WhiteBalance: 0
FocalLengthIn35mmFilm: 0
MakerNote: b'\x00s\x00\x00\x13k\x00\x00\x00\x06\x00\x00\x01\xc2
Puede que estas entradas sean de tu interés:
- Python – Eliminar metadatos EXIF
- Python – datos EXIF – obtener coordenadas GPS de una fotografía
- Python – Organizar fotos con datos EXIF y eliminar duplicados utilizando HASH
- Python y OpenStreetMap, GEOPY – cómo conocer una dirección a partir de coordenadas GPS.
Saludos!