quarta-feira, 21 de junho de 2017

Converter imagem para Base64 e o Inverso

Com estas funções pode converter uma imagem inserida num Timage em Base64 e converter um Base64 em Imagem.

uses
  System.SysUtils,
 System.Classes,
 FMX.Graphics,
 Soap.EncdDecd;

function Base64FromBitmap(Bitmap: TBitmap): string;
var
  Input: TBytesStream;
  Output: TStringStream;
  F: TextFile; // Apenas para exemplo
begin
  Input := TBytesStream.Create;
  try
    Bitmap.SaveToStream(Input);
    Input.Position := 0;
    Output := TStringStream.Create('', TEncoding.ASCII);
    try
      Soap.EncdDecd.EncodeStream(Input, Output);
      Result := Output.DataString;
   
    //Criar um ficheiro txt com o codigo base 64  apenas para exemplo
      AssignFile(f,'imagem.txt');
      Rewrite(f); //abre o arquivo para escrita
      Writeln(f,Result);
      Closefile(f);

    finally
      Output.Free;
    end;
  finally
    Input.Free;
  end;
end;

function BitmapFromBase64(const base64: string): TBitmap;
var
  Input: TStringStream;
  Output: TBytesStream;

begin
  Input := TStringStream.Create(base64, TEncoding.ASCII);
  try
    Output := TBytesStream.Create;
    try
      Soap.EncdDecd.DecodeStream(Input, Output);
      Output.Position := 0;
      Result := TBitmap.Create;
      try
        Result.LoadFromStream(Output);
      except
        Result.Free;
        raise;
      end;
    finally
      Output.Free;
    end;
  finally
    Input.Free;
  end;
end;

COMO USAR A FUNÇÃO


Crie um Timage e atribua uma imagem .
Crie um Botão e na função click insira o seguinte codigo.

procedure btconverterimagemClick(Sender: TObject);
begin
    showmessage(Base64FromBitmap(nomedoTimage.Bitmap));
end;

6 comentários:

  1. Utilizo para transferência de dados compactados entre Cliente e Serve.
    Muito útil.

    ResponderEliminar
  2. Primeiramente parabéns pelas funções.Tenho um campo blob para imagem no banco Firebird e quero mostrar num Timage como faço usando estas funções.

    ResponderEliminar
  3. Como Usar o function BitmapFromBase64(const base64: string): TBitmap;

    Não consegui aqui.

    ResponderEliminar
  4. NÃO FUNCIONA, é necessário saber qual header da imagem

    ResponderEliminar
  5. How to play 777 slots - Casino Roll
    777 online slots 파라오 사이트 is a free demo version for 게임 사 online 토토사이트운영 slot game play. All 777 slots 벳인포승무패계산기 are available to play 망고도메인 for real money and will help you

    ResponderEliminar