Quitar metadatos de una foto: borra la ubicación GPS y los datos EXIF antes de compartirla

Las fotos del teléfono guardan, sin que se vea, dónde se tomaron (las coordenadas GPS exactas), cuándo, con qué teléfono y a veces su número de serie. Elige una foto y verás qué datos lleva; después descarga una copia sin metadatos para compartirla con tranquilidad en Marketplace, un grupo o una página web. Funciona con JPEG, PNG y WebP sin recomprimir la imagen, y todo ocurre en tu navegador: la foto no se sube a ningún lado.

o arrástralas aquí, o pégalas con Ctrl+V (hasta 20)

Tus fotos no salen de tu equipo. El navegador las lee y las limpia en tu propio dispositivo. La foto de ejemplo es un dibujo con datos inventados: dice que se tomó con un iPhone 15 en el Zócalo de la Ciudad de México.

Qué datos esconde una foto

Las cámaras y los teléfonos guardan dentro de cada foto un bloque de información llamado EXIF. Los programas de edición añaden otros, como XMP o IPTC. Entre lo que pueden contener:

  • La ubicación GPS, con precisión de pocos metros, si el teléfono tiene activada la ubicación para la cámara. Una foto tomada en casa revela tu dirección.
  • La fecha y la hora exactas de la toma, con la zona horaria.
  • El teléfono o la cámara: marca, modelo, objetivo y, en muchas cámaras, el número de serie, que permite relacionar fotos distintas de la misma persona.
  • El programa con que se editó, el autor, comentarios y, en las «fotos en movimiento», un vídeo corto pegado al final.

¿No lo quitan ya las redes sociales?

Muchas sí: Facebook, Instagram, X y WhatsApp (cuando se envía como foto) borran la ubicación de las imágenes que publican. Pero no todos los caminos lo hacen: enviar la foto como documento o archivo por WhatsApp o Telegram, por correo, por AirDrop, subirla a una página web, a un anuncio o a una carpeta compartida en la nube suele conservar todos los metadatos. Ante la duda, límpiala antes.

Cómo lo hace esta herramienta

  • JPEG, PNG y WebP: la herramienta recorre los bloques del archivo y copia solo los de la imagen. Quita el EXIF, el XMP, el IPTC, los comentarios, los textos de PNG y los datos que vayan después del final de la imagen. Los píxeles no se tocan: la copia es idéntica, sin pérdida de calidad.
  • La orientación se conserva: si el teléfono guardó la foto «de lado» con la indicación de girarla, la copia mantiene solo ese dato, para que no aparezca girada. No identifica a nadie.
  • El perfil de color se conserva, para que los colores no cambien.
  • HEIC, AVIF y otros formatos: si tu navegador sabe abrirlos (Safari abre los HEIC del iPhone), puedes descargar una copia en JPEG, que se vuelve a comprimir con calidad muy alta y sale sin metadatos.

Quitar los metadatos sin esta página

  • iPhone: al compartir una foto, toca «Opciones» arriba y desactiva «Ubicación». Para que las fotos nuevas no la guarden, en Ajustes > Privacidad y seguridad > Localización > Cámara elige «Nunca».
  • Android: en la app de la cámara, desactiva «Etiquetas de ubicación» (el nombre cambia según la marca). Google Fotos tiene un ajuste para ocultar la ubicación de las fotos que compartes por enlace.
  • Windows: clic derecho en la foto > Propiedades > Detalles > «Quitar propiedades e información personal».
  • Línea de comandos: exiftool -all= foto.jpg borra todos los metadatos, y exiftool foto.jpg los muestra.

Quitar los metadatos de un JPEG en Python

Un JPEG es una serie de segmentos, cada uno con un marcador de dos bytes y su largo. Para limpiarlo basta con no copiar los de metadatos, sin tocar los datos de la imagen:

"""Quita los metadatos de un JPEG sin recomprimirlo: recorre sus segmentos y se salta EXIF, XMP, IPTC y comentarios."""
import struct

QUITAR = {0xE1: "APP1 (EXIF o XMP)", 0xED: "APP13 (IPTC)", 0xFE: "COM (comentario)"}


def quitar_metadatos(jpeg):
    assert jpeg[:2] == b"\xff\xd8", "no es un JPEG"
    salida, quitados, i = [jpeg[:2]], [], 2
    while i < len(jpeg):
        marcador = jpeg[i + 1]
        if marcador == 0xDA:                       # empiezan los datos de la imagen: se copian tal cual
            salida.append(jpeg[i:])
            break
        (largo,) = struct.unpack(">H", jpeg[i + 2:i + 4])
        segmento = jpeg[i:i + 2 + largo]
        if marcador in QUITAR or (0xE3 <= marcador <= 0xEF and marcador != 0xEE):   # APP14 (Adobe) se queda
            quitados.append((QUITAR.get(marcador, f"APP{marcador - 0xE0}"), len(segmento)))
        else:
            salida.append(segmento)
        i += 2 + largo
    return b"".join(salida), quitados


def segmento(marcador, datos):
    return bytes([0xFF, marcador]) + struct.pack(">H", len(datos) + 2) + datos


# Un JPEG de juguete: cabecera JFIF, un EXIF con «GPS», un comentario y los datos de la imagen
foto = (b"\xff\xd8" + segmento(0xE0, b"JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00")
        + segmento(0xE1, b"Exif\x00\x00" + b"GPS 19.4326 N, 99.1332 W" * 4)
        + segmento(0xFE, b"Tomada con mi telefono") + b"\xff\xda" + b"\x00" * 40 + b"\xff\xd9")

limpia, quitados = quitar_metadatos(foto)
for nombre, n in quitados:
    print(f"quitado {nombre}: {n} bytes")
print(f"{len(foto)} bytes -> {len(limpia)} bytes; ¿queda «GPS»? {b'GPS' in limpia}")
$ python3 metadatos.pyquitado APP1 (EXIF o XMP): 106 bytes
quitado COM (comentario): 26 bytes
196 bytes -> 64 bytes; ¿queda «GPS»? False

Con fotos de verdad conviene usar una biblioteca probada: con Pillow, Image.open("foto.jpg").getexif() lee el EXIF, y piexif.remove("foto.jpg") lo borra sin recomprimir. Otras herramientas para cuidar tu privacidad: el analizador de enlaces sospechosos y el generador de contraseñas. Todas, en decodigo.com/herramientas.

Formatos: Exif 3.0 (CIPA DC-008), PNG (W3C) y contenedor WebP. La herramienta se comprobó con 60 fotos JPEG (normales, progresivas y con vídeo pegado), PNG y WebP con GPS, EXIF, XMP, IPTC y comentarios escritos con ExifTool: tras limpiarlas, ExifTool no encuentra ningún metadato salvo la orientación, y los píxeles son idénticos a los del original.