Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Mostrar imagen que viene en Base64 (https://www.clubdelphi.com/foros/showthread.php?t=79295)

jars 22-06-2012 17:50:57

Mostrar imagen que viene en Base64
 
Hola amigos.
En una aplicación tengo que mostrar en un TImage un avatar que me llega codificado en Base64.
Uso una unit (Base64.pas) que copie de alguien del foro y el codigo que utilizo es el siguiente:

Código:

procedure TfrmMedia.LoadAvatar(sAvatar: string);
var
 Stream: TMemoryStream;
begin
  Stream:= TMemoryStream.Create; //('imagen.jpg',fmCreate);
  try
    StrToStream(sAvatar, Stream);
    Stream.Position := 0;
    imgAvatar.Picture.Graphic.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

Pero me muestra el TImage en blanco, este es el string sAvatar:

Código:

'/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAyADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD03JoyaSnxJ5kqR5xuYD866jIdBbzXLbYkLHvjoKutpE8cDyyOPlGdqjca3oYY4IhHGoVRT6xdR9C+U43Joya09ato4ZkkQBfMzkD1Hf8AWsutU7q5DVhcmikopgFTWgJvIQoyd4OPxqGpIJfJuI5cZ2sDj1pMDr6KQEMAQcg8ilrmNTG14HbA2PlBYE/lWLWxrs2XihHYbjWPW8PhM5bhRRRViCigAk4AyT2q/b6Rcz4Ljyl9W6/lSbS3CxsaWzPp0JY5OCB9AcVcpqII41ReigAU6ud6s1Ryt+7PfzlzyHIH0HSq1b+paY9zL50TLuxgqe/41iTQSwNtljZD7jrW8WmjNojoooqhG/oiJ9lL7V37iN2Oa1KKK557mkdgoooqRhTXRXUq6hlPYjIooprcDkZQBK4HA3GiiiukyP/Z'
Alguien me podria dar una mano con esto?
Gracias

Delphius 22-06-2012 18:17:45

Hola,

¿Y como pretendes que te ayudemos si no indicas siquiera el hilo o el usuario que aportó dicha unidad?
Vaya uno a saber que %$&@# hace esa unidad realmente y en como funciona. Aportá más información porque así como está la cosa, no queda otra que ir a por las bolas de cristales.

Saludos,

jars 22-06-2012 18:22:33

En este enlace esta la unit
http://www.clubdelphi.com/foros/show...ghlight=base64

Neftali [Germán.Estévez] 22-06-2012 18:27:13

Cita:

Empezado por jars (Mensaje 435843)
Hola amigos.
En una aplicación tengo que mostrar en un TImage un avatar que me llega codificado en Base64.
Uso una unit (Base64.pas) que copie de alguien del foro y el codigo que utilizo es el siguiente:

No lo entiendo. Si lo que te llega es un string codificado en Base64, tendrás que decodificarlo para poder mostrarlo ¿no?
Imagino que esa unit (que estoy con Delphius en que nos deberías dar más información sobre ella) podrá codificar y decodificar.

Decodifica primero la imagen y luego muestrala.
Para comprobarlo puedes grabarla entre medio a disco y comprobar que graba algo correcto. Lo digo porque yo he intentado decodificar el String que me has pasado y el fichero resultante no parece ser una imagen.

Neftali [Germán.Estévez] 22-06-2012 18:34:21

La prueba. Por ejemplo he aquí una imagen codificada en Base64:

Código:

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

Si usas cualquier Decodificador online con esta cadena:

http://www.opinionatedgeek.com/dotne.../base64decode/
http://www.motobit.com/util/base64-decoder-encoder.asp
http://webnet77.com/cgi-bin/helpers/base-64.pl
...

Verás que el resultante es un fichero que si renombras a JPG es la imagen inicial (mi avatar).

Yo intento esto con la cadena que tú me has pasado y no nada que se parezca a una imagen.
:confused::confused::confused:

Neftali [Germán.Estévez] 22-06-2012 18:43:09

Pues he probado la Unit de Domingo Seoane y funciona perfectamente.
Puedes poner en un form, un Memo y un TImage y un par de botones con este código:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TMemoryStream;
  Texto: String;
begin
  Stream:= TMemoryStream.Create;
  try
    Stream.LoadFromFile('r:\Neftali.jpg');
    Texto:= BinToStr(Stream.Memory,Stream.Size);
    Memo1.Lines.Text := Texto;
  finally
    Stream.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 Stream: TFileStream;
begin
  Stream:= TFileStream.Create('r:\imagen1.jpg',fmCreate);
  try
    StrToStream(Memo1.Lines.Text,Stream);
  finally
    Stream.Free;
   end;
  Image1.Picture.LoadFromFile('r:\imagen1.jpg');
end;

Añade la unit JPEG al use y funciona perfectamente.



Un saludo.

jars 22-06-2012 18:49:53

Es cierto Neftali, probe en mi programa con tu avatar y lo muestra correcto, entonces el problema esta en el string que estoy recibiendo.
Muchas gracias.

Neftali [Germán.Estévez] 25-06-2012 09:42:57

Creo que sí. :o

Un saludo.


La franja horaria es GMT +2. Ahora son las 01:27:16.

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