将JPG(png / GIf等)转换为64base字符串:

时间:2017-01-13 11:02:13

标签: delphi

我在XP SP3上使用Delphi 7和Indy 9。

我的HTML中包含多个<img>标记。

我想将<img src="filepath" ...>代码转换为<img src="data:image/jpg;base64,...">代码。

作为练习,我计划在每个图像上这样做:

procedure TForm1.Button2Click(Sender: TObject);
VAR
   Str    : AnsiString;
   Stream1, Stream2  : TFileStream;
   Decoder : TIDEncoderMime;

BEGIN
   Stream1 := TFilestream.Create(Curdir + '\solopgang.jpg', fmOpenRead);
   Stream2 := TFilestream.Create('C:\test221.html', fmCreate);
   Try
      Decoder := TIDEncoderMime.Create(NIl);
      Str := decoder.Encode(Stream1^, length(Stream1));
      StrToFile('c:\test221.html',Str);
   Finally
      FreeAndNil(Decoder);
      Stream1.Free;
      Stream2.Free;
  END;
end;

但是,当我在我的TWebBrowser中展示它时,我只得到了图像的外框,我不知道为什么。

1 个答案:

答案 0 :(得分:1)

正如David在评论中提到的,您的代码不会如图所示进行编译。它应该更像这样:

procedure TForm1.Button2Click(Sender: TObject);
var
  Stream : TFileStream;
  Encoder : TIdEncoderMIME;
begin
  Stream := TFileStream.Create(Curdir + '\solopgang.jpg', fmOpenRead or fmShareDenyWrite);
  try
    Encoder := TIdEncoderMIME.Create(nil);
    try
      StrToFile('c:\test221.html', Encoder.Encode(Stream));
    finally
      Encoder.Free;
    end;
  finally
    Stream.Free;
  end;
end;

如果你升级到Indy 10,你可以改用:

procedure TForm1.Button2Click(Sender: TObject);
var
  Stream1, Stream2 : TStream;
begin
  Stream1 := TIdReadFileExclusiveStream.Create(Curdir + '\solopgang.jpg');
  try
    Stream2 := TIdFileCreateStream.Create('c:\test221.html');
    try
      Str := TIdEncoderMIME.EncodeStream(Stream1, Stream2);
    finally
      Stream2.Free;
    end;
  finally
    Stream1.Free;
  end;
end;