Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Codificar y Decodificar imágenes (https://www.clubdelphi.com/foros/showthread.php?t=96602)

cmfab 13-02-2024 12:43:51

Codificar y Decodificar imágenes
 
Buenas a todos!

Con una aplicación codifico en base64 un archivo de imagen (png o jpg). para posteriormente enviarla a través de un servicio REST.

El problema que estoy presentando es que cuando recibo la imagen en una aplicación sobre Windows la decodificación se realiza exitosamente y puedo ver el resultado en un control TImage. Sin embargo el mismo código lo trato de ejecutar en Linux y no me funciona. me salta el error: "unssoported Stream Format".

El código que uso para descodificar la imagen y asignarla a un control TImage es el siguiente:

Código Delphi [-]
decodeBase64 := TNetEncoding.Base64.Decode (strBase64);
AStringStream := TStringStream.Create(decodeBase64);
AStringStream.Position := 0;
imagen.Picture.LoadFromStream(AStringStream);

No me queda claro si las librerías de la clase TNetEncoding no funcionan en Linux. pero por más que he buscado no he encontrado la solución.

Gracias de antemano

delphi.com.ar 13-02-2024 17:59:42

Como primer paso haría una prueba sencilla: crear un archivo con la información decodificada en ambos sistemas operativos. Me suena mas a un problema del encoder de strings que al base64. Las API REST por defecto codifican todo en UTF-8, y no deberías tener inconvenientes al tratar el string en base64, pero si puede cambiar el default encoder de un sistema operativo a otro.

Si mal no entiendo esta ayuda, deberías pode asignarle el encoder al TStringStream en el momento de la creación tanto en el cliente como en el servidor:
Código Delphi [-]
AStringStream := TStringStream.Create(decodeBase64,TEncoding.UTF8);

Saludos.

PD: ¿En qué momento la ayuda de Delphi se volvió tan mala?... solía ser genial.

cmfab 14-02-2024 09:38:39

Muchas Gracias por tu interés en responder.

No logro que me funcione en Linux.

He cambiado la API para renderizar un campo blob, uso en la API la Herramienta DMVC FrameWork. me renderiza bien un campo de foto, pero pareciera que no está en base64 y no puedo decodificarlo desde otro proyecto delphi. lo dejo acá por si alguien sabe como deserializar un campo blob de un dataset que haya sido serializado o renderizado con DMVC Frame Work, ya que es otra posibilidad que estoy valorando.

Agradecería alguna idea de como enviar una imagen a través de una API que pueda ser restaurada en Linux.

Saludos.

cmfab 14-02-2024 12:34:56

Buenas,

Les comento que he logrado una solución a mi problema y es que como el cliente es una aplicación Web lo que opté por hacer fue insertar en un tag <img> de html el texto de la imagen en base64 y me ha funcionado.

algo así:

"<img src="data:image/jpeg;base64,' + textoBase64Imagen + '">"';

Saludos.

Casimiro Notevi 14-02-2024 19:31:41

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 19:47:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi