Extraer metadatos de una imagen con python

editado abril 2017 en Programación

Por twitter veo que la parcerita @UnaPibaGeek publicó un código en python bien sencillo pero bastante útil, que permite identificar si una imagen tiene metadatos y si los tiene los muestra en pantalla.

El trino en cuestión es el siguiente.

Pero como se empezaron a quejar del formato en el que se publicó (imagen)

pues me puse en la tarea con la ayuda de un OCR online (http://www.onlineocr.net/) de organizar el código y compartirlo con ustedes.

import argparse
from PIL import Image
from PIL.ExifTags import TAGS

parser = argparse.ArgumentParser()
parser.add_argument('-i', '--image',
  required=True, type=str, help='Image')

args = parser.parse_args()
img = Image.open(args.image)
exif = img._getexif()

try:
  for (k,v) in exif.iteritems():
    print '%s = %s' (TAGS.get(k), v)
except:
  print "Metadata not found!"

Ahí les dejo ;-) todos los créditos para @UnaPibaGeek "Sheila A. Berta"

Actualizo la entrada para añadir el aporte de @a_l_e_p_h quien le añadió la opcion de leer directorios

import argparse,os
from PIL import Image
from PIL.ExifTags import TAGS
# MetadaExtractor
# By: @UnaPibageek
# Last change: @a_l_e_p_h
def readMetadata(image):
    img = Image.open(image)
    exif = img._getexif()
    print("Results for "+image)
    try:
        for (k, v) in exif.iteritems():
            print '%s = %s'%(TAGS.get(k), v)
    except:
        print "Metadata not found!"
if __name__ == '__main__':
    parser = argparse.ArgumentParser(prog='MetadataExtractor',usage='%(prog)s [options]')
    parser.add_argument('-i', '--image',
      required=False, type=str, help='Image')
    parser.add_argument('-d', '--directory',
      required=False, type=str, help='Directory')
    args = parser.parse_args()
    if args.directory and args.image:
        print("Only can use -i --image or -d --directory but not both")
    else:
        if args.image:
            readMetadata(args.image)
        elif args.directory:
            try:
                filenames = next(os.walk(args.directory))[2]
                for filename in filenames:
                    try:
                        img = Image.open(filename)
                        readMetadata(filename)
                    except:
                        print(filename+" is not a valid Image")
            except:
                print(args.directory + " is not a valid directory")
Etiquetado:
Accede o Regístrate para comentar.