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

如何将System.Drawing.Image创建的Bitmap重新保存为Base64字符串?

解决Bitmap转Base64嵌入HTML邮件的问题

你遇到的核心问题出在注释代码的两处错误:

  • System.Drawing.Imaging.ImageFormat.ToString()是错误用法,必须传入具体的ImageFormat枚举值(比如[System.Drawing.Imaging.ImageFormat]::Png),ToString()返回的是类型名称,不是枚举实例,会导致Save方法调用失败。
  • 把Bitmap保存到MemoryStream后,没有将流的Position重置为0,[Convert]::ToBase64String会从流的末尾开始读取,最终得到空字符串。

另外,无参数创建MemoryStream在PowerShell里是合法的,之前的报错大概率是ImageFormat参数错误引发的连带问题。

修正后的完整代码如下,替换你原来的注释部分即可:

# 创建空内存流
$ImageBytesMemoryStream = New-Object IO.MemoryStream
# 使用具体的图像格式枚举值保存Bitmap(这里以PNG为例,可按需换成Jpeg等)
$NewBitmap.Save($ImageBytesMemoryStream, [System.Drawing.Imaging.ImageFormat]::Png)
# 将流的读取位置重置到起始点
$ImageBytesMemoryStream.Position = 0
# 转换为Base64字符串
$ImageBase64 = [Convert]::ToBase64String($ImageBytesMemoryStream.ToArray())
# 释放流资源(可选,PowerShell会自动回收,但显式释放更规范)
$ImageBytesMemoryStream.Dispose()

补充说明:

  • 嵌入HTML邮件时,需要给Base64字符串加上对应的前缀,比如data:image/png;base64,$ImageBase64,这样邮件客户端才能正确识别显示图片。
  • 确保在完成Base64转换后再处理$NewBitmap的释放,避免资源提前回收导致报错。

内容的提问来源于stack exchange,提问作者user66001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:15:03