PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 28 → Resize de una imagen con datos EXIF
Resize de una imagen con datos EXIF
Débuté par LLUIS, 04 sep. 2014 12:30 - 4 réponses
Membre enregistré
5 messages
Posté le 04 septembre 2014 - 12:30
Buenos días,

El objetivo es redimensionar una imagen y que no pierda la información EXIF (características técnicas, GPS, tags, autor, ...).

Como la instrucción dResize() directamente las elimina he realizado la siguiente rutina:

Procedure Imagen_Convertir_New(MiImagen is Image,LOCAL sFichero is string,LOCAL sDestino is string,LOCAL nAncho is int,LOCAL nAlto is int,LOCAL sCampoImagen is string) : boolean

//Cargar la imagen en el campo (pierde las informaciones EXIF)
{sCampoImagen,indControl}..Width=MiImagen..Width
{sCampoImagen,indControl}..Height=MiImagen..Height
{sCampoImagen,indControl}=dChargeImage(MiImagen..Image)

//Redimensionar el campo
IF dResize({sCampoImagen,indControl},nAncho,nAlto)=False THEN RESULT False

//Ajustar el tamaño del campo al de la imagen redimensionada
{sCampoImagen,indControl}..Width=nAncho
{sCampoImagen,indControl}..Height=nAlto

//Extraer las informaciones EXIF de la imagen original y cargarlas en el campo
nPosicion is int
sLista is string=ImageInfoList(sFichero)
FOR EACH STRING sPosicion OF sLista SEPARATED by CR
nPosicion = sPosicion
ImageInfoModify({sCampoImagen,indControl},nPosicion, ImageInfoValue(sFichero,nPosicion))
END
ImageInfoClose(sFichero)

//Guardar la imagen redimensionada
RESULT dSaveImageJPEG({sCampoImagen,indControl},sDestino,100,imgSaveTag)


MiImagen es la imagen inicial ya cargada en la variable
sFichero es el nombre completo del fichero de la imagen inicial
sCampoImagen es el campo de imagen de la ficha donde gestiono la imagen

El problema está en la última instrucción: dSaveImageJPEG().
Antes de ejecutar la instrucción si hago una ImageInfoList() del campo, tiene la información EXIF.

Al guardar la imagen, se redimensiona y crea correctamente, pero ha perdido toda la información EXIF, es decir, que no respeta el flag imgSaveTag.

(He probado variaciones con ImageInfoSave() con resultados similares).

Gracias por la ayuda.

--
Salu2.
Lluís Dedeu
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 04 septembre 2014 - 17:57
Hola Lluís, una pregunta rápida: ese mismo código lo probaste sin usar indirección, es decir usar el control imagen real ? Te digo esto porque en algunas situaciones me encontré que usando indirección no funciona exactamente igual que con los propios controles.

De todas formas voy a probar la función dSaveImageJPEG y te cuento.

Saludos,
Federico.
Membre enregistré
5 messages
Posté le 04 septembre 2014 - 18:29
Buenas tardes Federico,

No se me había ocurrido probarlo con la imagen directa, pero lo acabo de hacer y tampoco funciona.

Muchas gracias por la sugerencia.

--
Salu2.
Lluís Dedeu
Membre enregistré
60 messages
Popularité : +2 (2 votes)
Posté le 05 septembre 2014 - 17:23
Lluís, con la función dSaveImageJPEG() con imgSaveTag activado me pasa igual que a vos, la información EXIF se pierde; logré algún avance con la función ImageInfoSave(). Probé el siguiente código y EXIF se mantiene:

sDestino is string = "testDestino.jpg"// Ruta a la nueva imagen redimensionada
sFichero is string = "testOrigen.jpg"// Ruta a la imagen inicial
IMG_ControlImagen = sFichero// Control imagen en ventana

// Redimensiono el control
nNuevoAncho is int = 200
nNuevoAlto is int = 200
IF dResize(IMG_ControlImagen,nNuevoAncho, nNuevoAlto) THEN
Info("Redimensionar OK!")
END

// Grabo en un nuevo archivo
IF ImageInfoSave(IMG_ControlImagen,sDestino) THEN
Info("Grabar OK!")
END


Aún sin modificar ninguna etiqueta EXIF, se ve que la función las mantiene en la imagen de destino. Tal vez no te sirva esta función, que de hecho comentabas que la habías probado, pero bueno, algo es algo...

Saludos,
Federico.
Membre enregistré
5 messages
Posté le 08 septembre 2014 - 14:14
Buenos días Federico,

Solucionado.

Efectivamente, el procedimiento que planteas funciona perfectamente y respeta "la mayoría" de datos EXIF.
Y tal y como intuías en tu primer post, con la indirección del campo no funciona en absoluto.

De todas maneras, al final no lo podré utilizar, porque hay algunos campos EXIF que no los respeta (desaparecen), como por ejemplo:
- El país en los datos de localización de la foto
- El artista e instrucciones especiales en los datos descriptivos
- Las palabras clave en los datos clasificativos
- El teléfono, mail, url, ciudad, código postal, provincia y país en los datos de contacto
- ...

De todas maneras, Federico, muchas gracias por tu ayuda.

--
Salu2.
Lluís Dedeu