0
点赞
收藏
分享

微信扫一扫

delphi如何把json传递过来的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;

 



举报

相关推荐

0 条评论