我在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
中展示它时,我只得到了图像的外框,我不知道为什么。
答案 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;