PDA

Ver la Versión Completa : Codificar y Decodificar imágenes


cmfab
13-02-2024, 12:43:51
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:


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 (https://docwiki.embarcadero.com/Libraries/Sydney/en/System.Classes.TStringStream.Encoding), deberías pode asignarle el encoder al TStringStream en el momento de la creación tanto en el cliente como en el servidor:

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
^\||/^\||/^\||/