delphi如何把json传递过来的base64值转成图片

资料来原:

https://blog.csdn.net/red_eye/article/details/129634709     delphi如何把json传递过来的base64值转成图片

https://blog.csdn.net/zisongjia/article/details/103423915    Delphi 读取PNG base64编码文件生成图片

 

delphi如何把json传递过来的base64值转成图片

在Delphi中,您可以使用TNetEncoding.Base64.DecodeString方法将JSON传递过来的Base64编码字符串转换为原始二进制数据。然后,您可以将该二进制数据保存为图像文件或将其加载到TImage组件中以显示图像。

以下是一个示例代码,假设Base64编码的图像数据存储在JSON字符串的“image”字段中:

copy codeuses
System.NetEncoding, System.Classes, Vcl.Imaging.jpeg, Vcl.Graphics;

procedure Base64ToImage(const ABase64String: string; const AFileName: string);
var
InputBytes: TBytes;
OutputStream: TMemoryStream;
JPEGImage: TJPEGImage;
begin
// 将Base64编码的字符串转换为原始二进制数据
InputBytes := TNetEncoding.Base64.DecodeString(ABase64String);

// 将二进制数据保存到文件
OutputStream := TMemoryStream.Create;
try
OutputStream.WriteBuffer(InputBytes[0], Length(InputBytes));
OutputStream.SaveToFile(AFileName);
finally
OutputStream.Free;
end;

// 或者将二进制数据加载到TImage组件中
JPEGImage := TJPEGImage.Create;
try
JPEGImage.LoadFromStream(TBytesStream.Create(InputBytes));
Image1.Picture.Assign(JPEGImage);
finally
JPEGImage.Free;
end;
end;
您可以调用此过程,将Base64编码的字符串转换为图像文件或TImage组件中的图像。例如:

copy codeBase64ToImage('iVBORw0KGgoAAAANSUhEUgAAAAUAAAAAVCAYAAABv8r...', 'image.jpg');
其中,第一个参数是Base64编码的字符串,第二个参数是要保存的文件名。如果您想将图像加载到TImage组件中,则将第二个参数设置为''。

 

Delphi 读取PNG base64编码文件生成图片


uses NetEncoding,PNGImage;

procedure TForm1.FormCreate(Sender: TObject);

var

LInputStream: TFileStream;

LOutputStream: TMemoryStream;

Png: TPNGImage;

begin

LInputStream := TFileStream.Create('C:\Temp\PlateImage.txt', fmOpenRead or fmShareDenyWrite);

try

LOutputStream := TMemoryStream.Create;

try

TNetEncoding.Base64.Decode(LInputStream, LOutputStream);

ShowMessage(LOutputStream.Size.ToString);

LOutputStream.Position := 0;

Png := TPNGImage.Create;

try

Png.LoadFromStream(LOutputStream);

Image1.Picture.Assign(Png);

finally

Png.Free;

end;

finally

LOutputStream.Free;

end;

finally

LInputStream.Free;

end;

end;

 

保存文件,加载文件

 1 procedure TForm1.Base64ToImage(const ABase64String, AFileName: string; AImage: TImage);
 2 var
 3   InputBytes: TBytes;
 4   OutputStream: TMemoryStream;
 5 
 6   Png: TPNGImage;
 7   LInputStream: TFileStream;
 8   LOutputStream: TMemoryStream;
 9 begin
10   // 将Base64编码的字符串转换为原始二进制数据
11   InputBytes := TNetEncoding.Base64.DecodeStringToBytes(ABase64String);
12 
13   // 将二进制数据保存到文件
14   OutputStream := TMemoryStream.Create;
15   try
16     OutputStream.WriteBuffer(InputBytes[0], Length(InputBytes));
17     OutputStream.SaveToFile(AFileName);
18   finally
19     OutputStream.Free;
20   end;
21 
22   // 或者将二进制数据加载到TImage组件中
23   LInputStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
24   Png := TPNGImage.Create;
25   try
26     Png.LoadFromStream(LInputStream);
27 
28     if AImage <> nil then
29       AImage.Picture.Assign(Png);
30   finally
31     Png.Free;
32     LInputStream.Free;
33   end;
34 end;

直接从字符流转PNG加载

 1 procedure TForm1.Base64ToImage(const ABase64String, AFileName: string; AImage: TImage);
 2 var
 3   InputBytes: TBytes;
 4   Png: TPNGImage;
 5   oBytesStream: TBytesStream;
 6 begin
 7   // 将Base64编码的字符串转换为原始二进制数据
 8   InputBytes := TNetEncoding.Base64.DecodeStringToBytes(ABase64String);
 9 
10   // 或者将二进制数据加载到TImage组件中
11   oBytesStream := TBytesStream.Create(InputBytes);
12   Png := TPNGImage.Create;
13   try
14     Png.LoadFromStream(oBytesStream);
15 
16     if AImage <> nil then
17       AImage.Picture.Assign(Png);
18   finally
19     Png.Free;
20   end;
21 end;

 

 

posted on 2023-06-28 22:48  疯狂delphi  阅读(241)  评论(0编辑  收藏  举报

导航