将base64字节转换为图像asp.net

时间:2015-03-05 11:01:50

标签: asp.net vb.net

我正在尝试将base64字节转换为图像。

这是我正在使用的代码:

    Private Function Base64ToImage(ByVal base64 As String) As System.Drawing.Image
    Dim img As System.Drawing.Image
    Dim ms As MemoryStream = New MemoryStream
    Dim b1 As String = base64.Replace("_", "/")
    Dim b2 As String = base64.Replace("-", "+")
    Dim b64 As String = b2.Replace(" ", "+")

    Dim bb As String = b64.Substring(0, b64.Length - 3)


    Dim b() As Byte
    b = Convert.FromBase64String(b64)
    ms = New System.IO.MemoryStream(b)
    img = System.Drawing.Image.FromStream(ms)

    Return img
End Function

这是我得到的错误:

  

输入不是有效的Base-64字符串,因为它包含非基数64   字符,两个以上的填充字符或非法字符   在填充字符中。

问题在哪里?

3 个答案:

答案 0 :(得分:5)

对于那些不确定为什么要进行替换的人:我假设(这是the mother of ...)该字符串包含一些base64 variant

问题可能在于:

Dim b1 As String = base64.Replace("_", "/")
Dim b2 As String = base64.Replace("-", "+")
Dim b64 As String = b2.Replace(" ", "+")

应该阅读(可能):

Dim b1 As String = base64.Replace("_", "/")
Dim b2 As String = b1.Replace("-", "+")
Dim b64 As String = b2.Replace(" ", "+")

请注意以上2个片段中的第二行。

除了使用3个变量(或更多)并浪费大量内存,除了这些替换可能这一事实外,我还是这样做:

base64 = base64.Replace("_", "/").Replace("-", "+").Replace(" ", "+")

base64 = base64.Replace("_", "/")
base64 = base64.Replace("-", "+")
base64 = base64.Replace(" ", "+")

它可以在内存中多次保存(一个"中间解码的变体")一个base64字符串,并且像前两个片段一样更容易弄乱变量。

我也觉得很奇怪,-都被+取代,所以在那里也可能出现错误。

答案 1 :(得分:1)

如果你得到一个base64字符串,你不应该替换像:

这样的字符
Dim b1 As String = base64.Replace("_", "/")
Dim b2 As String = base64.Replace("-", "+")
Dim b64 As String = b2.Replace(" ", "+")

这可能会使你的base64输入字符串变得混乱。只需将字符串直接转换为byte []:

Dim b() As Byte
b = Convert.FromBase64String(base64)

答案 2 :(得分:0)

在尝试转换之前,删除“data:image / png; base64”(或长字符串之前的任何内容)。