Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-02-2016
Ramsay Ramsay is offline
Miembro
NULL
 
Registrado: ene 2016
Posts: 104
Poder: 9
Ramsay Va por buen camino
Leer imagen y convertir su contenido a base64

Hola , necesito leer una imagen para convertir su contenido a base64 y usarlos en html facilmente , pero no encuentro referencias sobre como leer la imagen , ¿ como podria hacer esto ?
Responder Con Cita
  #2  
Antiguo 10-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Una alternativa es usando los componentes Indy:

Código Delphi [-]
unit Unit2;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls,
  ExtCtrls,
  IdBaseComponent,
  IdCoder,
  IdCoder3to4,
  IdCoderMIME;

type
  TForm2 = class(TForm)
    IdEncoderMIME1: TIdEncoderMIME;
    imLoad: TImage;
    OpenDialog1: TOpenDialog;
    imBase64: TImage;
    btnLoad: TButton;
    btnToBase64: TButton;
    IdDecoderMIME1: TIdDecoderMIME;
    procedure btnLoadClick(Sender: TObject);
    procedure btnToBase64Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btnLoadClick(Sender: TObject);
begin
  if not OpenDialog1.Execute then
    Exit;

  imLoad.Picture.LoadFromFile(OpenDialog1.FileName);
end;

procedure TForm2.btnToBase64Click(Sender: TObject);
var
  AImageStream: TMemoryStream;
  AStringStream: TStringStream;
  ABase64, DecodedBase64: string;
begin
  AImageStream := TMemoryStream.Create;
  try
    imLoad.Picture.Graphic.SaveToStream(AImageStream);
    AImageStream.Position := 0;
    ABase64 := IdEncoderMIME1.Encode(AImageStream);
  finally
    AImageStream.Free;
  end;

  DecodedBase64 := IdDecoderMIME1.DecodeString(ABase64);
  AStringStream := TStringStream.Create(DecodedBase64);
  try
    AStringStream.Position := 0;
    imBase64.Picture.Bitmap.LoadFromStream(AStringStream);
  finally
    AStringStream.Free;
  end;
end;

end.
Responder Con Cita
  #3  
Antiguo 10-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Esta es otra forma similar a la anterior, pero usando metodos estaticos (de clase)

Código Delphi [-]
procedure TForm2.btnToBase64Click(Sender: TObject);
var
  AStringStream: TStringStream;
  ABase64, DecodedBase64: string;
begin
  AStringStream := TStringStream.Create;
  try
    imLoad.Picture.Graphic.SaveToStream(AStringStream);
    AStringStream.Position := 0;
    ABase64 := TIdEncoderMIME.EncodeString(AStringStream.DataString);
  finally
    AStringStream.Free;
  end;

  DecodedBase64 := TIdDecoderMIME.DecodeString(ABase64);
  AStringStream := TStringStream.Create(DecodedBase64);
  try
    AStringStream.Position := 0;
    imBase64.Picture.Bitmap.LoadFromStream(AStringStream);
  finally
    AStringStream.Free;
  end;
end;
Responder Con Cita
  #4  
Antiguo 10-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Y la ultima variante es utilizando las funciones definidas en la unidad Soap.EncdDecd:

Código Delphi [-]
var
  AMemStream: TMemoryStream;
  AStreamBase64, ADecodedStream: TStringStream;
  ABase64, DecodedBase64: string;
begin
  AMemStream := TMemoryStream.Create;
  AStreamBase64 := TStringStream.Create;
  try
    imLoad.Picture.Bitmap.SaveToStream(AMemStream);
    AMemStream.Position := 0;
    EncodeStream(AMemStream, AStreamBase64);
    AStreamBase64.Position := 0;
    ABase64 := AStreamBase64.DataString;
  finally
    AStreamBase64.Free;
  end;

  DecodedBase64 := DecodeString(ABase64);
  ADecodedStream := TStringStream.Create(DecodedBase64);
  try
    ADecodedStream.Position := 0;
    imBase64.Picture.Bitmap.LoadFromStream(ADecodedStream);
  finally
    ADecodedStream.Free;
  end;

Esta ultima fue la que logro replicar la imagen exactamente a como estaba antes; curioso que los componentes Indy tengan alguna falla

Las pruebas las hice con formato BMP
Responder Con Cita
  #5  
Antiguo 10-02-2016
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
¿En que Delphi estás probando?

Yo estoy haciendo la prueba de la función de Soap en Delphi XE7 y no decodifica bien, me devuelve una excepción "EEncodingError": No mapping for the Unicode character exists in the target multi-byte code page"

No tengo ni idea de porqué pasa esto...
Responder Con Cita
  #6  
Antiguo 10-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Los 3 ejemplos Delphi 2010

Cual te da error? El componente Indy te permite especificar un TEncoding que creo que es lo que te esta fallando
Responder Con Cita
  #7  
Antiguo 18-05-2018
tatifuentesvasq tatifuentesvasq is offline
Registrado
NULL
 
Registrado: mar 2014
Posts: 3
Poder: 0
tatifuentesvasq Va por buen camino
y decodificar unos bytes a una imagen bmp

Cita:
Empezado por AgustinOrtu Ver Mensaje
Y la ultima variante es utilizando las funciones definidas en la unidad Soap.EncdDecd:

Código Delphi [-]
var
  AMemStream: TMemoryStream;
  AStreamBase64, ADecodedStream: TStringStream;
  ABase64, DecodedBase64: string;
begin
  AMemStream := TMemoryStream.Create;
  AStreamBase64 := TStringStream.Create;
  try
    imLoad.Picture.Bitmap.SaveToStream(AMemStream);
    AMemStream.Position := 0;
    EncodeStream(AMemStream, AStreamBase64);
    AStreamBase64.Position := 0;
    ABase64 := AStreamBase64.DataString;
  finally
    AStreamBase64.Free;
  end;

  DecodedBase64 := DecodeString(ABase64);
  ADecodedStream := TStringStream.Create(DecodedBase64);
  try
    ADecodedStream.Position := 0;
    imBase64.Picture.Bitmap.LoadFromStream(ADecodedStream);
  finally
    ADecodedStream.Free;
  end;

Esta ultima fue la que logro replicar la imagen exactamente a como estaba antes; curioso que los componentes Indy tengan alguna falla

Las pruebas las hice con formato BMP


PODRIAS POR FAVOR EXPLICARME UN POCO, QUE YA ME HICE BOLAS... por lo que entiendo hay decodifican la imagen par volverla un string... (estoy mal?), y yo lo que tengo es un archivo extenso donde tengo que decodificar para convertir a imagen, podrian ayudarme?
Responder Con Cita
  #8  
Antiguo 18-05-2018
tatifuentesvasq tatifuentesvasq is offline
Registrado
NULL
 
Registrado: mar 2014
Posts: 3
Poder: 0
tatifuentesvasq Va por buen camino
convertir imagen de base 64 a imagen .bmp




PODRIAS POR FAVOR EXPLICARME UN POCO, QUE YA ME HICE BOLAS... por lo que entiendo hay decodificas una imagen para replicarla... (estoy mal?), y yo lo que tengo es un archivo extenso .txt que debo decodificar para convertir a imagen, podrian ayudarme?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mostrar imagen que viene en Base64 jars Gráficos 7 25-06-2012 10:42:57
Como puedo convertir una imagen a una imagen semitransparente? antonio302050 Gráficos 0 27-03-2010 18:01:48
leer el contenido de un archivo txt ingmichel Varios 6 11-07-2008 16:27:17
Leer Contenido URL adonias Varios 3 14-09-2007 18:12:18
Leer contenido de cd's rruffino Varios 3 09-01-2005 01:56:54


La franja horaria es GMT +2. Ahora son las 15:09:48.


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
Copyright 1996-2007 Club Delphi