arrays - 在vb.net中将base64解码为图像

标签 arrays vb.net image memorystream linegraph

我一直在互联网上搜索,但没有找到答案。您想告诉我,如何从 base64 解码为像线图一样的 Image 吗?我一直在尝试首先从 base64 转换为 Byte 数组,然后从 Byte 数组转换为 Image。 p>

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

最佳答案

查看您的代码,您的问题可能是使用变量名称 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

#更新:

您也可以尝试使用 ImageConvertorByte 数组转换为 Image :

Private Function convertbytetoimage(ByVal BA As Byte())
    Dim converter As ImageConverter = New ImageConverter()
    _image = CType(converter.ConvertFrom(BA), Image)
    Return _image
End Function

#更新2:

因为看起来主要问题在于 base64 字符串。请看一下我的小演示,它将 ImagePictureBox 内部转换为 base64 字符串,然后转换为 Byte > 数组,最后返回一个 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 字符串后,它看起来像这样(请记住,每个图像都是不同的,因此您不会得到相同的图像)字符串):

/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==

如果您查看该字符串的前 5 个字符,您会发现它等于 /9j/4,这意味着该字符串表示的文件是 PNG文件,您可以查看my old answer了解如何验证 base64 字符串。

另一个注意事项,我使用了一个小的 PNG 图像,因此我使用了下一个格式:

PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png) 

如果您有其他格式并且想要使用相同的代码,请务必更改格式。

关于arrays - 在vb.net中将base64解码为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507221/

相关文章:

vb.net - 无法在 VB.Net 中设置 SeriesCollection.Values 属性

.net - 如何使用获取资源数据

arrays - 处理输入数据时获取 "The second parameter of split is a string, not an array"

javascript - 如何将数字数组变成对象数组

vb.net - 如何在 GridView 中为网格单元格着色?

html - 页面上的图像未对齐

python - 如何读取cv2.findContours的结果?

html - 背景图像不会随着 Firefox 中的屏幕大小而缩小

arrays - 迭代一种类型的数组并仅复制另一种类型的另一个数组中的特定项

arrays - 我可以将数组访问器添加到通用 TypeScript 类吗?