如何在FMX应用中用Delphi内置功能将TImage的TBitmap转Base64编码?
用Delphi内置功能将FMX TImage的TBitmap编码为Base64
可以借助Delphi内置的System.NetEncoding.TBase64Encoding和FMX图像编码类实现,无需依赖Indy库,核心思路是先将TBitmap保存到内存流,再对流内容进行Base64编码。
实现代码
首先创建一个通用转换函数:
uses System.SysUtils, System.Classes, FMX.Graphics, System.NetEncoding, FMX.Surfaces; function FMXBitmapToBase64(const ABitmap: TBitmap; const AImageExt: string = '.png'): string; var LMemStream: TMemoryStream; LBase64Encoder: TBase64Encoding; LSaveParams: TBitmapCodecSaveParams; begin Result := ''; if not Assigned(ABitmap) then Exit; LMemStream := TMemoryStream.Create; try // 初始化保存参数(JPEG格式可调整质量) FillChar(LSaveParams, SizeOf(LSaveParams), 0); if AImageExt.Equals('.jpg', IgnoreCase) then LSaveParams.Quality := 90; // 质量范围0-100,按需调整 // 将Bitmap保存为指定格式到内存流 TBitmapCodecManager.SaveToStream(LMemStream, ABitmap, AImageExt, @LSaveParams); LMemStream.Position := 0; // 执行Base64编码 LBase64Encoder := TBase64Encoding.Create; try Result := LBase64Encoder.EncodeToString(LMemStream); finally LBase64Encoder.Free; end; finally LMemStream.Free; end; end;
使用示例
从TImage中获取Bitmap并转换:
var LBase64Str: string; begin if Assigned(Image1.Bitmap) then begin // 转换为PNG格式的Base64 LBase64Str := FMXBitmapToBase64(Image1.Bitmap); // 转换为JPEG格式的Base64 // LBase64Str := FMXBitmapToBase64(Image1.Bitmap, '.jpg'); // 后续可将LBase64Str嵌入JSON发送 end; end;
注意事项
TBase64Encoding是Delphi XE8及以上版本的内置类,需确保你的Delphi版本支持- 图像格式选择:PNG适合无损场景,JPEG适合需要压缩体积的场景
- 若需自定义Base64编码的换行规则,可在创建
TBase64Encoding时传入参数(如TBase64Encoding.Create(76, #13#10)指定每行76字符并添加换行)
内容的提问来源于stack exchange,提问作者Andre Van Zuydam
相关产品推荐
相关产品推荐

