我正在尝试将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 字符,两个以上的填充字符或非法字符 在填充字符中。
问题在哪里?
答案 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”(或长字符串之前的任何内容)。