Kabosu - Creando cosas

Logo de la página. Gato esférico con colores verdoso.

Evitando publicar los metadatos de las fotos en el blog

Publicado: 2025-01-28

Etiquetas: Blog, Python


Hace poco publiqué aquí un artículo que contenía una fotografía. Pasé un buen rato asegurándome de que no tuviese información GPS en los metadatos de la imagen. Al final, para estar 100% seguro, lo que hice fue abrir la foto original con el visor de Ubuntu y hacer una captura de pantalla que luego edité con GIMP. Desde entonces estuve pensando que debería añadir alguna comprobación al generador de mi blog para que evitar publicar posiciones para preservar lo poco que pueda mi privacidad.

Exif

Investigué un poco eso de los metadatos en las fotografías. Parece ser que se llaman etiquetas Exif (Exchangeable image file format) y el estándar fue creado en los años 90.

No contienen únicamente información sobre la posición GPS de la imagen sino que pueden incluir otra mucha información. Por ejemplo, acabo de extraer la información Exif de una imagen JPG de este blog y he obtenido las siguientes etiquetas:

EXIF ColorSpace (Short): sRGB
Image DateTime (ASCII): 2024:04:20 19:01:03
Image ExifOffset (Long): 148
Image Orientation (Short): Horizontal (normal)
Image ResolutionUnit (Short): Pixels/Inch
Image Software (ASCII): GIMP 2.10.36
Image XResolution (Ratio): 72
Image YResolution (Ratio): 72

Extrayendo Exif con Python

Buscando por Internet encontré la librería ExifRead que puedo usar en Python 3. No sé si es la mejor opción pero parecía lo suficiente sencilla y soportaba JPG y PNG que son los dos formatos que uso en esta web.

El código que añadí a mi blog es muy sencillo. Hay una función que extrae las etiquetas Exif y otra que lanza una excepción si alguna etiqueta contiene "gps" en su nombre.

import exifread

def get_tags(path):
    f = open(path, 'rb')

    tags = exifread.process_file(f)

    return tags.keys()


def block_if_gps(path):
    tags = get_tags(path)

    for t in tags:
        t = t.lower()

        if 'gps' in t:
            raise ValueError('Remove GPS coordinates from images!')

He añadido una llamada a block_if_gps cada vez que copio un fichero al directorio www que es el que subo al servidor. Si hay alguna posición GPS se lanza una excepción y para la generación de la página.

Ahora, si por error, intento publicar una imagen con posición GPS el generador me explotará en la cara y si quiero que continúe tendré que quitar los metadatos.


Artículo anterior: Creando seres vivos