Bild in Base64

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    Bild in Base64

    Hallo Forum, ich habe irgendwo in den tiefen des Internets eine Funktion gefunden mit der man Bilder in einen Base64 String und wieder zurück umwandeln kann. Mein Problem ist, das wenn ich ein Bild vorweg in eine PictureBox lade und es konvertiere gibt es keinen Fehler, wenn ich aber ein Bild mit einem OpenFileDialog öffne und das Bild dann konvertieren will gibt es einen Fehler. Und zwar diesen:



    -> hier das umwandeln:

    VB.NET-Quellcode

    1. Dim S As String
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIMGtoBase.Click
    3. S = ImageToBase64(PictureBox1.Image)
    4. TextBox1.Text = S
    5. End Sub


    -> und hier die dazugehörige Funktion:

    Der Fehler tritt übrigens in dieser Funktion auf (markierte Zeile)

    VB.NET-Quellcode

    1. Public Function ImageToBase64(ByVal oImage As Image) As String
    2. If oImage IsNot Nothing Then
    3. With New System.Drawing.ImageConverter
    4. ' Image in Byte-Array umwandeln
    5. /////////////////////////
    6. Dim nBytes() As Byte = CType(.ConvertTo(oImage, GetType(Byte())), Byte())
    7. /////////////////////////
    8. ' Byte-Array in Base64-codierten String umwandeln
    9. Return (Convert.ToBase64String(nBytes, _
    10. Base64FormattingOptions.InsertLineBreaks))
    11. End With
    12. Else
    13. ' Leerstring zurückgeben
    14. Return ("")
    15. End If
    16. End Function


    Das Bild lade ich so:

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click
    2. OpenFileDialog1.Filter = "jpg files (*.jpg)|*.jpg"
    3. Dim FilePath As String
    4. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    5. FilePath = OpenFileDialog1.FileName
    6. PictureBox1.Load(FilePath)
    7. End If
    8. End Sub


    Ich hoffe jemand kann mir einen Tipp geben wieso das auf diese Art und Weise nicht geht,
    schönen Tag allen noch =) .
    Ist das der Code der funktioniert? Also beim Button Click wird das Bild aus der PictureBox umgewandelt und das funktioniert ja?

    Wie meinst du das mit dme OpenFileDialog? Es direkt umzuwandeln ohne es vorher in die Picturebox zu laden?

    Zudem kann man dein Code noch kürzen, du hast unnötige Variablen deklariert. FilePath und S brauchst du nicht.

    VB.NET-Quellcode

    1. PictureBox1.Load(OpenFileDialog1.FileName)


    und

    VB.NET-Quellcode

    1. TextBox1.Text = ImageToBase64(PictureBox1.Image)


    Sparst du 4 Zeilen Code.
    Erstmal Danke für die Antwort :) , ja das ist der Code der funktioniert.
    FilePath konnt ich wegkürzen aber S brauch ich um es wieder zu einem Bild zu machen.
    Wenn ich Vorweg im Designer ein Bild hinein lade, klappt das.
    Wenn ich jetzt aber ein Bild mit einem Dialog lade und dann, siehe
    Button2 Click dieses in Base64 umwandeln will bekomme ich den Fehler in der Funktion.

    Ok hab jetzt folgendes:


    VB.NET-Quellcode

    1. Dim S As String
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIMGtoBase.Click
    3. 'Bild zu Base64:
    4. S = ImageToBase64(PictureBox1.Image)
    5. TextBox1.Text = ImageToBase64(PictureBox1.Image)
    6. End Sub


    und

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBasetoIMG.Click
    2. ' Base 64 zum Bild:
    3. PictureBox2.Image = Base64ToImage(S)
    4. End Sub


    Die beiden Funktionen:

    VB.NET-Quellcode

    1. Public Function ImageToBase64(ByVal oImage As Image) As String
    2. If oImage IsNot Nothing Then
    3. With New System.Drawing.ImageConverter
    4. ' Image in Byte-Array umwandeln
    5. Dim nBytes() As Byte = CType(.ConvertTo(oImage, GetType(Byte())), Byte())
    6. ' Byte-Array in Base64-codierten String umwandeln
    7. Return (Convert.ToBase64String(nBytes, _
    8. Base64FormattingOptions.InsertLineBreaks))
    9. End With
    10. Else
    11. ' Leerstring zurückgeben
    12. Return ("")
    13. End If
    14. End Function
    15. ''' <summary>
    16. ''' Konvertiert einen Base64-codierten String in ein Image-Objekt
    17. ''' </summary>
    18. ''' <param name="sData">Base64-codierter String</param>
    19. ''' <returns>Image-Objekt</returns>
    20. Public Function Base64ToImage(ByVal sData As String) As Image
    21. Dim oImage As Image = Nothing
    22. If sData.Length > 0 Then
    23. ' String decodieren und in Byte-Array umwandeln
    24. Dim nBytes() As Byte = Convert.FromBase64String(sData)
    25. If nBytes IsNot Nothing AndAlso nBytes.Length > 0 Then
    26. ' Byte-Array in Image-Objekt umwandeln
    27. With New System.Drawing.ImageConverter
    28. oImage = CType(.ConvertFrom(nBytes), Image)
    29. End With
    30. End If
    31. End If
    32. Return (oImage)
    33. End Function


    Ich versteh nicht so richtig wo der Unterschied ist, ob ich ein Bild vorweg oder mit einem Dialog lade :o .
    Bin aber offen für Tipps.
    Hab eine Lösung gefunden

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaden.Click
    2. Dim Pfad As String
    3. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    4. Pfad = OpenFileDialog1.FileName
    5. PictureBox1.Image = Image.FromFile(Pfad)
    6. End If
    7. End Sub


    So funktioniert es jedenfalls, danke dir =), schönen Tag.

    Edit//

    Hm so gehts auch ;D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Tony-S“ ()

    Also bei mir funktioniert das. Hier mein kompletter Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Function ImageToBase64(ByVal oImage As Image) As String
    3. If oImage IsNot Nothing Then
    4. With New System.Drawing.ImageConverter
    5. ' Image in Byte-Array umwandeln
    6. Dim nBytes() As Byte = CType(.ConvertTo(oImage, GetType(Byte())), Byte())
    7. ' Byte-Array in Base64-codierten String umwandeln
    8. Return Convert.ToBase64String(nBytes, Base64FormattingOptions.InsertLineBreaks)
    9. End With
    10. Else
    11. ' Leerstring zurückgeben
    12. Return Nothing
    13. End If
    14. End Function
    15. ''' <summary>
    16. ''' Konvertiert einen Base64-codierten String in ein Image-Objekt
    17. ''' </summary>
    18. ''' <param name="sData">Base64-codierter String</param>
    19. ''' <returns>Image-Objekt</returns>
    20. Public Function Base64ToImage(ByVal sData As String) As Image
    21. Dim oImage As Image = Nothing
    22. If sData.Length > 0 Then
    23. ' String decodieren und in Byte-Array umwandeln
    24. Dim nBytes() As Byte = Convert.FromBase64String(sData)
    25. If nBytes IsNot Nothing AndAlso nBytes.Length > 0 Then
    26. ' Byte-Array in Image-Objekt umwandeln
    27. With New System.Drawing.ImageConverter
    28. oImage = CType(.ConvertFrom(nBytes), Image)
    29. End With
    30. End If
    31. End If
    32. Return oImage
    33. End Function
    34. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    35. TextBox1.Text = ImageToBase64(PictureBox1.Image)
    36. End Sub
    37. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    38. PictureBox2.Image = Base64ToImage(TextBox1.Text)
    39. End Sub
    40. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    41. OpenFileDialog1.Filter = "jpg files (*.jpg)|*.jpg"
    42. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    43. Dim img As New Bitmap(OpenFileDialog1.FileName)
    44. PictureBox1.Image = img
    45. End If
    46. End Sub
    47. End Class