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

如何用VB.NET将Base64字符串转图片并处理透明背景

解决PNG签名Base64转图片后黑色背景问题

问题原因

PNG格式支持透明通道,但JPG不支持。你的代码中两种场景都会导致透明背景显示为黑色:

  • 直接加载PNG Bitmap时,若报表/控件不支持透明渲染,透明区域会被填充为黑色;
  • 调用SaveSignatureAsJPG方法将PNG转成JPG时,透明区域会被默认填充为黑色。

解决方案

通过创建带指定背景色(比如白色)的Bitmap,将原PNG图片绘制上去,替换透明区域为目标背景色。以下是修改后的代码:

1. 添加辅助转换方法

Private Function ConvertTransparentToBackground(image As Image, backgroundColor As Color) As Bitmap
    ' 创建与原图片尺寸一致的Bitmap,预设背景色
    Dim resultBmp As New Bitmap(image.Width, image.Height)
    
    Using g As Graphics = Graphics.FromImage(resultBmp)
        ' 填充背景色
        g.Clear(backgroundColor)
        ' 绘制原图片,保留原有图像内容
        g.DrawImage(image, New Rectangle(0, 0, resultBmp.Width, resultBmp.Height))
    End Using
    
    Return resultBmp
End Function

2. 修改ToImage属性的Get逻辑

Public Property ToImage() As System.Drawing.Image Implements ISigCapture.ToImage
    Get
        If mPaymentSubType = "EmergePay" Then
            Dim arr = Convert.FromBase64String(mLastSignature)
            Dim img = New Bitmap(New MemoryStream(arr))
            ' 把透明背景转为白色
            Return ConvertTransparentToBackground(img, Color.White)
        End If

        ' 替换原SaveSignatureAsJPG逻辑,避免强制转JPG导致黑背景
        Dim arr = Convert.FromBase64String(mLastSignature)
        Dim img = New Bitmap(New MemoryStream(arr))
        ' 把透明背景转为白色
        Return ConvertTransparentToBackground(img, Color.White)

        ' 如果报表确实需要JPG格式,可使用以下代码替代上面两行
        ' Dim tempFilename = System.IO.Path.GetTempFileName()
        ' ConvertTransparentToBackground(img, Color.White).Save(tempFilename, Imaging.ImageFormat.Jpeg)
        ' Dim image = New Bitmap(tempFilename)
        ' System.IO.File.Delete(tempFilename)
        ' Return image
    End Get
    Set(ByVal value As System.Drawing.Image)
        PictureBox1.Image = value
    End Set
End Property

代码说明

  • 辅助方法ConvertTransparentToBackground先创建带目标背景色的画布,再将原PNG图片绘制上去,彻底替换透明区域;
  • 移除了SaveSignatureAsJPG的调用,避免其强制转JPG导致的黑背景问题;
  • 若报表要求必须使用JPG格式,可取消注释代码块,将处理后的图片保存为JPG再加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:42:54