desarrollo,  python

Python – clonar datos EXIF entre imagenes

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:

Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada.