我一直在互联网上搜索,但没有找到答案。您想告诉我,如何从base64
解码为Image
如线图?我一直在尝试先从base64
转换为Byte
数组,然后从Byte
数组转换为Image
。
Private Function convertbytetoimage(ByVal BA As Byte())
Dim ms As MemoryStream = New MemoryStream(BA)
image = Image.FromStream(ms) 'I always get wrong in this line.
Return image
End Function
答案 0 :(得分:1)
查看代码,您的问题可能是使用变量名image
而不是_image
。
请注意,VB
是not case sensitive,如C#
和其他编程语言。
在您的代码中,我假设您将image
变量定义为Image
。
要使用静态Image.FromStream(ms)
,您需要使用完全限定名称Image
或更改变量名称。
以下是修改代码的方法:
Private Function convertbytetoimage(ByVal BA As Byte())
Dim ms As MemoryStream = New MemoryStream(BA)
image = System.Drawing.Image.FromStream(ms)
Return image
End Function
或者您可以通过更改变量名来执行此操作,例如:
Dim _image as Image
Private Function convertbytetoimage(ByVal BA As Byte())
Dim ms As MemoryStream = New MemoryStream(BA)
_image = Image.FromStream(ms)
Return _image
End Function
您也可以尝试使用ImageConvertor
将Byte
数组转换为Image
:
Private Function convertbytetoimage(ByVal BA As Byte())
Dim converter As ImageConverter = New ImageConverter()
_image = CType(converter.ConvertFrom(BA), Image)
Return _image
End Function
因为看起来主要问题是base64
字符串。请查看我的小型演示,将Image
从PictureBox
转换为base64
字符串,然后转换为Byte
数组,最后返回{ {1}}。
Image
请注意,在将Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim base64String = ConvertImageToBase64String() 'Using Functions To Make the code tidier
Dim byteArray = ConvertBase64ToByteArray(base64String) 'Using Functions To Make the code tidier
Dim image = convertbytetoimage(byteArray) 'Using Functions To Make the code tidier
PictureBox2.Image = image 'since we're using a small windows form app, we'll set back the image to a second picture box.
End Sub
Public Function ConvertImageToBase64String() As String
Using ms As New MemoryStream()
PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png) 'We load the image from first PictureBox in the MemoryStream
Dim obyte = ms.ToArray() 'We tranform it to byte array..
Return Convert.ToBase64String(obyte) 'We then convert the byte array to base 64 string.
End Using
End Function
Public Function ConvertBase64ToByteArray(base64 As String) As Byte()
Return Convert.FromBase64String(base64) 'Convert the base64 back to byte array.
End Function
'Here's the part of your code (which works)
Private Function convertbytetoimage(ByVal BA As Byte())
Dim ms As MemoryStream = New MemoryStream(BA)
Dim image = System.Drawing.Image.FromStream(ms)
Return image
End Function
转换为Image
字符串后,它看起来像那样(请记住每个图像都不同,因此您不会得到相同的字符串):
base64
如果查看字符串的前5个字符,您会发现它等于/9j/4AAQSkZJRgABAQEAYABgAAD/4QBaRXhpZgAATU0AKgAAAAgABQMBAAUAAAABAAAASgMDAAEAAAABAAAAAFEQAAEAAAABAQAAAFERAAQAAAABAAAAAFESAAQAAAABAAAAAAAAAAAAAYagAACxj//bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIADAAMAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APDdH01tY1a3sElWIzMQZGBIUAEk4HXgGvfvC/hPTbDSIzZabLcjnMyxoC54zlzgtyo46A5xjNeC6BfR6brtpdTcRI+HPPyhgVJ45OM5x7V9kaFYpYeH7W1keNpIU2O0ZypIPOD6ZrhxSlKXLfSx14eUYx5utzy3U7C7uL1bZLZoI26tIm3Ht715/wCNdK0p45JbRf3yIWaXHJKjv7YGOc4r6C1qIS2VxGOrIQPrjivn7xNbSWVtdW8wAkEbE4Of4a4sPN+0sddVKVO7R5tRRRXtnkhX1d4N8V2+seGrOcTw+e8CSTRxlvkY5VuG5ALq+O3HFfPngHwmPFeueTMSLWHDSY/jJPC5HIyAxz/s4yCQa+iItJtdIt7a0tYIVjV0QIiBV5YA8DA5yT9ea5cVQdWK5XZo3oVVTeuzDV9XRYHKsMAcmvn/AMdXV214wIJhm+ZpMdDk4X26Z96+i/EHhm2htWubpgiL8scaMcu3+FedalotjOhSVM57nkfjXJgcLOMnUqHTisRBwUIHg1FdR4n8LNpcbXttG32VZBFIAGIjYgleffaep7H8OXr1Tzz2D4OExWU829wBO42hztJ2pyR0JHY9sn1NesQT/atTsoyes6E/gc/0r5p8LeK5/DlwAQ8lqzF2SMqrbtuM5IOR0JHGdo5Fer6N4+0rUfLKXSw3G0nY3BB289fQE8+xoA7zxPq/9pagyo3+jw5VPf1NcXqMw55qefUoSnySKR6g1z9/fKc/OPzoA5vx0TJpgYOw5UkA/e7YP8/wrzuuz8VajDcWQgEqhwBwTyef/rVxlAH/2Q==
,这意味着此字符串表示的文件是/9j/4
文件,您可以查看{{3查看如何验证 PNG
字符串。
另一个注意事项,我使用了一个小base64
图像,因此我使用了下一种格式:
PNG
如果您有其他格式并且想要使用相同的代码,请务必更改格式。