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;
欢迎关注我,一起进步!扫描下方二维码即可加我
![](https://images.cnblogs.com/cnblogs_com/FKdelphi/1101510/o_200417075318%E5%8A%A0%E6%88%91QQ.jpg)
![](https://images.cnblogs.com/cnblogs_com/FKdelphi/1101510/o_200417080925%E5%8A%A0%E6%88%91%E5%BE%AE%E4%BF%A1.jpg)