You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:11:14