Cómo Leer Metadatos de Imágenes: Fechas de Creación y Modificación Explicadas
Extrae fechas reales de creación y modificación sin depender del sistema de archivos.
Por HolaGPT Editorial · 10 min lectura · 2026-08-02
Un archivo JPG en tu disco muestra una fecha de modificación. Pero ese número puede cambiar con una simple copia. Las imágenes llevan dentro información mucho más fiable: los metadatos. Ahí se esconden instantes reales de captura, digitalización y hasta de geolocalización. Profesionales del desarrollo, fotografía forense o automatización de flujos necesitan leer esos datos sin depender de lo que muestra el explorador de archivos.
En esta guía verás cómo acceder a las fechas incrustadas en JPEG, PNG, HEIC, RAW y más. Exploraremos herramientas de línea de comandos, librerías de Python y métodos para interpretar campos como DateTimeOriginal, DateTimeDigitized o FileModifyDate. Todo con ejemplos listos para copiar y pegar, sin teoría de relleno.
Si necesitas generar rápida mente un script a medida, plataformas como HolaGPT pueden ayudarte a adaptar estos fragmentos a tu stack. Pero aquí te darás la base sólida para entender qué estás extrayendo y por qué.
Qué son los metadatos de una imagen y por qué las fechas del sistema engañan
Los metadatos son información estructurada que viaja dentro del archivo de imagen. Pueden incluir modelo de cámara, apertura, velocidad de obturación, coordenadas GPS y, sobre todo, fechas. Los estándares más comunes son EXIF (Exchangeable Image File Format), IPTC y XMP. EXIF lo generan las cámaras digitales; IPTC y XMP se usan más en flujos editoriales.
Cuando ves la fecha de modificación en Windows o macOS, estás mirando un atributo del sistema de archivos. Copiar el archivo, moverlo entre discos o editarlo con cualquier software puede reiniciar ese valor. En cambio, campos como DateTimeOriginal de EXIF permanecen intactos a menos que una herramienta los sobrescriba intencionadamente. Por eso para auditorías, organización de fototecas o automatización de backups, leer los metadatos internos es la única opción seria.
Los campos de fecha que realmente importan
No todos los metadatos son igual de fiables. Aquí tienes los tres campos clave en EXIF y cómo se relacionan entre sí:
- DateTimeOriginal: momento exacto en que se tomó la fotografía según el reloj de la cámara. Es el dato más relevante para catalogar imágenes.
- DateTimeDigitized: instante en que la imagen fue digitalizada. En cámaras digitales suele coincidir con DateTimeOriginal, pero en escaneos puede diferir.
- ModifyDate: última modificación de los datos de la imagen. Algunos programas lo actualizan al editar, otros no.
Adicionalmente, el estándar EXIF define subcampos como SubSecTimeOriginal que añaden milisegundos. En archivos RAW, los fabricantes pueden guardar sus propias etiquetas (MakerNotes) con marcas de tiempo aún más precisas. Fuera de EXIF, XMP expresa fechas en formato ISO 8601, facilitando el parseo automático.
El problema de la zona horaria
Las cámaras almacenan la fecha sin información de zona horaria. DateTimeOriginal es un string como “2024:03:15 11:30:00”. Tú debes decidir si interpretarlo como UTC o como hora local. En flujos de producción conviene normalizar todo a UTC tras la lectura, guardando un offset si se conoce.
Herramientas nativas para ver metadatos sin programar
Antes de lanzarte a escribir código, domina las herramientas de inspección rápida. Te ahorrarán horas de depuración al contrastar resultados.
ExifTool (línea de comandos)
Es el estándar de facto. Lee y escribe metadatos en más de 200 formatos de archivo. Instalación en macOS: brew install exiftool. En Linux: sudo apt install libimage-exiftool-perl. En Windows descarga el ejecutable desde el sitio oficial.
Para ver todas las fechas relevantes de una imagen:
exiftool -DateTimeOriginal -CreateDate -ModifyDate -FileModifyDate imagen.jpgLa salida muestra claramente las diferencias entre el reloj interno y el atributo del sistema de archivos. Añade -G para ver el grupo de cada etiqueta, útil cuando aparecen duplicados en distintos estándares.
Comandos integrados en el sistema
En macOS, el comando mdls lee los metadatos del índice Spotlight. No profundiza tanto en EXIF como ExifTool, pero sirve para una consulta rápida:
mdls -name kMDItemContentCreationDate foto.jpgEn Linux puedes usar identify de ImageMagick con la opción -verbose para ver el bloque EXIF completo. En Windows, PowerShell permite acceder a propiedades mediante la shell COM, pero es más tedioso. Por eso ExifTool sigue siendo la navaja suiza insustituible.
Lectura de fechas con Python: tres enfoques prácticos
Python ofrece varias librerías según el nivel de control que necesites. Vamos del más simple al más potente.
Pillow: acceso básico a EXIF
Pillow es la biblioteca de procesamiento de imágenes más usada en Python. Su soporte de EXIF es limitado pero suficiente para leer las fechas principales.
from PIL import Image
import piexif # para decodificar bytes
img = Image.open('foto.jpg')
exif_bytes = img._getexif()
if exif_bytes:
# El tag 36867 es DateTimeOriginal, 36868 DateTimeDigitized
fecha_original = exif_bytes.get(36867)
print(f'Fecha original: {fecha_original}')El problema: Pillow devuelve los datos en crudo. Para un parseo fiable necesitas piexif o manejar los bytes manualmente. Pillow es ideal si ya lo tienes en tu stack de procesamiento de imágenes y no quieres añadir dependencias pesadas.
ExifRead: lectura limpia de EXIF
Instala con pip install exifread. Esta librería decodifica las etiquetas directamente a strings legibles. El código se vuelve más claro:
import exifread
with open('foto.jpg', 'rb') as f:
tags = exifread.process_file(f)
fecha = tags.get('EXIF DateTimeOriginal')
print(fecha) # 2024:03:15 11:30:00
exifread maneja bien los MakerNotes de Canon, Nikon y otras marcas. Es una opción intermedia entre la simpleza de Pillow y la potencia de ExifTool.
PyExifTool: envoltorio para el comando exiftool
Cuando necesitas leer fechas de archivos RAW, vídeo o formatos propietarios, la mejor estrategia es usar ExifTool desde Python. La librería pyexiftool expone una interfaz nativa.
import exiftool
with exiftool.ExifTool() as et:
metadata = et.get_metadata('foto.cr3')
fecha = metadata.get('EXIF:DateTimeOriginal')
print(fecha)
Con este método obtienes todas las etiquetas de todos los grupos en un solo diccionario. Es pesado (lanza un subproceso de ExifTool), pero insuperable en cobertura de formatos.
Parseo de la fecha a objeto datetime
Las fechas EXIF vienen en formato 'YYYY:MM:DD HH:MM:SS'. Para convertirlas en un objeto datetime de Python conservando la conciencia de zona horaria:
from datetime import datetime, timezone
fecha_str = '2024:03:15 11:30:00'
dt = datetime.strptime(fecha_str, '%Y:%m:%d %H:%M:%S')
# Asumir que es UTC
dt_utc = dt.replace(tzinfo=timezone.utc)
print(dt_utc.isoformat())
Si trabajas con XMP, el parseo es directo con datetime.fromisoformat() porque XMP usa ISO 8601.
Automatización en flujos de trabajo reales
Extraer fechas manualmente está bien para una foto. Pero el valor real aparece al integrarlo en pipelines.
Renombrar archivos según la fecha de captura
Un script en bash con exiftool renombra cientos de fotos en segundos:
exiftool '-FileNameEsto convierte IMG_0001.JPG en 2024-03-15_11.30.00.JPG. El modificador %%-c añade sufijo si hay colisiones. Así mantienes un orden cronológico real, ignorando las fechas del sistema de archivos.
Organizar en carpetas por año/mes
Con Python puedes construir un clasificador automático que mueva imágenes a subcarpetas basadas en el mes de captura:
import exifread, os, shutil
from datetime import datetime
def organizar_por_fecha(ruta_origen, ruta_destino):
with open(ruta_origen, 'rb') as f:
tags = exifread.process_file(f, stop_tag='DateTimeOriginal')
fecha_str = tags.get('EXIF DateTimeOriginal')
if not fecha_str:
return
dt = datetime.strptime(str(fecha_str), '%Y:%m:%d %H:%M:%S')
subcarpeta = os.path.join(ruta_destino, str(dt.year), f'{dt.month:02d}')
os.makedirs(subcarpeta, exist_ok=True)
shutil.move(ruta_origen, os.path.join(subcarpeta, os.path.basename(ruta_origen)))
Integrar este tipo de lógica en tus aplicaciones backend o scripts de mantenimiento elimina la dependencia de la fecha del sistema y hace tu sistema de archivos coherente con la realidad de las imágenes.
Formatos más allá del JPEG: RAW, HEIC, PNG y PDF
Aunque EXIF se asocia al JPEG, muchos formatos lo albergan o tienen sus propios estándares para fechas.
- RAW (CR2, CR3, NEF, ARW): ExifTool es la única herramienta que los lee de forma fiable. Cada fabricante guarda las fechas en MakerNotes; a veces DateTimeOriginal está duplicado.
- HEIC/HEIF: Usan EXIF y XMP. Python puede leerlos con Pillow si compilaste con soporte HEIF, o llamando a ExifTool.
- PNG: No usa EXIF oficialmente, pero muchas aplicaciones graban bloques de metadatos textuales (tEXt, iTXt) con la fecha. No hay estándar fijo; toca inspeccionar con
exiftool. - WebP: Admite EXIF y XMP. Pillow a partir de la versión 8.2.0 puede leer esos metadatos.
- PDF: Puede contener imágenes incrustadas, cada una con sus metadatos. Para fechas del documento se usa el diccionario Info del PDF.
exiftooltambién los maneja.
Si necesitas procesar un lote mixto, la combinación de ExifTool + Python con pyexiftool es la ruta más segura. No asumas que todo tiene EXIF; programa un fallback a la fecha del sistema solo si es inevitable.
Cuándo no aparecen fechas y cómo diagnosticarlo
Te encuentras con un archivo sin DateTimeOriginal. Estos son los motivos típicos:
- La imagen fue generada por software (captura de pantalla, diseño gráfico) y el programa no insertó metadatos.
- Provino de un teléfono o cámara configurada para no escribir EXIF (modo privacidad).
- Fue editada con un programa que eliminó o no copió los metadatos originales. Muchos conversores web recortan EXIF para reducir peso.
- El formato no soporta EXIF y nadie añadió XMP.
Diagnóstico con ExifTool: usa la opción -a -G1 para listar absolutamente todos los metadatos disponibles. Busca etiquetas alternativas como XMP:CreateDate, QuickTime:CreateDate (en mov), o MakerNotes:DateTimeOriginal. A veces la fecha está escondida en el nombre del archivo con formato YYYYMMDD, y toca extraerla con regex.
En algunos casos, puedes aproximar la fecha a partir de los números de serie del fabricante o de la secuencia de imagen, pero eso ya es terreno forense avanzado.
Seguridad y privacidad al compartir imágenes
Los metadatos son un arma de doble filo. Antes de subir una imagen a Internet, pregúntate si quieres revelar la fecha exacta, coordenadas GPS y modelo de cámara. Para limpiar metadatos, de nuevo, ExifTool:
exiftool -all= -overwrite_original imagen.jpgEsto borra todo EXIF, XMP, IPTC, etc. Otra opción es eliminar solo el GPS o la fecha manteniendo el copyright. Si estás construyendo una aplicación que recibe imágenes de usuarios, ofrece una opción de “limpiar metadatos antes de subir”. HolaGPT puede asistirte en la generación de ese tipo de endpoints o scripts de sanitización, adaptándolos a tu framework.
Integración con bases de datos y búsqueda por fechas
Una vez que normalizas las fechas, almacénalas en tu base de datos como UTC. PostgreSQL, por ejemplo, tiene el tipo TIMESTAMPTZ. Con esa columna puedes indexar y hacer consultas como “fotos tomadas al amanecer”. Un script de indexación periódico que lea metadatos y actualice registros mantiene el sistema sincronizado incluso si los archivos se editan externamente.
Ejemplo de consulta para obtener imágenes de un rango de fechas en SQLAlchemy:
from datetime import datetime
images = session.query(Image).filter(
Image.captured_at.between(datetime(2024,3,1), datetime(2024,3,31))
).all()
El campo captured_at debe haberse rellenado previamente con nuestro script Python. Así creas fototecas inteligentes donde la cronología no depende de cuándo copiaste los archivos.
Buenas prácticas y recomendaciones finales
- No reemplaces la fecha del sistema a menos que sea estrictamente necesario. Complementa siempre con los metadatos internos.
- Normaliza a UTC al parsear, pero guarda también el offset si lo detectas.
- Usa ExifTool como herramienta de referencia para validar tus scripts. Si tu código da un resultado distinto, probablemente tu parseo tiene un error.
- Documenta qué campos usas y por qué. DateTimeOriginal no siempre existe; ten un plan de contingencia.
- Respeta la privacidad. Si tu aplicación expone metadatos, informa al usuario y dale control.
Leer metadatos de fechas no es un simple tip; es un paso necesario para cualquier sistema que maneje imágenes de forma profesional. Con las herramientas y patrones descritos aquí, estarás extrayendo verdad cronológica, no fechas de sistema manipuladas.