A modo de introducción
Hace tiempo que andaba detrás de modificar los datos EXIF de mis fotografiás. Hasta ahora, había conseguido leer los datos EXIF, pero la modificación de los mismos se me había atragantado de forma recurrente todas las veces que lo había intentado
Por una de esas casualidades di con el chiste para modificar los datos EXIF de una imagen que en esencia consiste en graba una nueva imagen con los datos modificados.
El código que muestro a continuación es una versión de demostración de como se realiza el proceso y solamente modifica la fecha de toma. De una forma parecida se pueden modificar el resto de los metadatos de la imagen antes de grabar la nueva imagen.
Código Demo [Vb,Net]
El siguiente código es completamente funcional, pero es solo un código DEMO de como se hace el trabajo. Como puedes apreciar, solo modifica la fecha, y no trata el resto de los metadatos, pero muestra como se lee una imagen, se modifica sus metadatos, y se graba la nueva imagen. Tampoco esta el control de errores y el control para no sobrescribir la imagen original
Public Class ProgramaExif Private Shared Sub Main(ByVal args As String()) Dim rutaImagen As String = "C:\Users\jms32\FOTOS\2023-05-11-QuesadaTiscar\Desktop\Nueva carpeta\2026_04_20_049_PT_VilarFormoso.jpg" Dim rutaSalida As String = "C:\Users\jms32\FOTOS\2023-05-11-QuesadaTiscar\Desktop\Nueva carpeta\2026_04_20_049_PT_VilarFormoso_modificada.jpg" Dim nuevaFecha As DateTime = New DateTime(2023,12,25,14,30,0) CambiarFechaExif(rutaImagen,rutaSalida,nuevaFecha) Console.WriteLine("Fecha EXIF modificada correctamente.") End Sub Private Shared Sub CambiarFechaExif(ByVal rutaEntrada As String,ByVal rutaSalida As String,ByVal nuevaFecha As DateTime) ' leer la imagen Using stream As FileStream = New FileStream(rutaEntrada,FileMode.Open,FileAccess.Read) Dim decoder As BitmapDecoder = BitmapDecoder.Create(stream,BitmapCreateOptions.PreservePixelFormat,BitmapCacheOption.OnLoad) Dim frame As BitmapFrame = decoder.Frames(0) ' leer los metadata de la imagen Dim metadata As BitmapMetadata = CType(frame.Metadata.Clone(),BitmapMetadata) ' modificar la fecha de toma metadata.DateTaken = nuevaFecha.ToString("yyyy:MM:dd HH:mm:ss") '--- ' Grabar la nueva imagen Dim encoder As BitmapEncoder = New JpegBitmapEncoder() encoder.Frames.Add(BitmapFrame.Create(frame,frame.Thumbnail,metadata,frame.ColorContexts)) Using salida As FileStream = New FileStream(rutaSalida,FileMode.Create,FileAccess.Write) encoder.Save(salida) End Using End Using End Sub End Class