Decode base64 to image in vb.net

Winda Sari Elisabeth Siburian picture Winda Sari Elisabeth Siburian · Mar 27, 2018 · Viewed 11.8k times · Source

I've been searching on the internet and have not found an answer. Would you like to tell me, how to decode from base64 to be Image like line graph? I've been trying to convert from base64 to Byte array first and from Byte array to 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

Answer

Paul Karam picture Paul Karam · Mar 27, 2018

Looking at your code, your problem could be using the variable name image instead of something like _image.

Keep in mind that VB is not case sensitive like C# and other programming languages.

In your code, I assume you defined your image variable as Image.

To use the static Image.FromStream(ms), you either need to use the fully qualified name of Image or change your variable name.

Here's how you can fix your code:

Private Function convertbytetoimage(ByVal BA As Byte())
    Dim ms As MemoryStream = New MemoryStream(BA)
    image = System.Drawing.Image.FromStream(ms)
    Return image
End Function

Or you can do this by changing your variable name, such as:

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

Update:

You can try to convert the Byte array to Image also by using ImageConvertor:

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

Update 2:

Since it looks like that the main problem is with the base64 string. Please have a look at my small demo that convert an Image from inside a PictureBox to base64 string, then to Byte array, and at the end, back to an 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

Note that after converting the Image to base64 string, it looks something like that (keep in mind that each image is different, hence you won't get the same string):

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

If you look at the first 5 characters of the string, you notice it's equal to /9j/4 which means that the file represented by this string is a PNG file, you may look at my old answer to see how to validate a base64 string.

Another note, I used a small PNG image, hence I used the next format:

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

If you have another Format and you want to use same code, make sure to change the format.