vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Saftschubser
Datum: 18.03.15 10:27

Hallo zusammen,

derzeit versuche ich, den Inhalt eines Bildes auszulesen, um diesen dann in einer MySQL DB zu speichern.

Zum Auslesen des Byte Arrays habe ich zwei versch. Codes verwendet.

a.)

Dim images2 As Image = Image.FromFile(directory & filename & extension)
                                                Dim mstream As New _
                                                  System.IO.MemoryStream()
                                                images2.Save(mstream, _
                                                System.Drawing.Imaging.ImageFor_
                                                mat.Jpeg)
                                                Dim arrImage() As Byte = _
                                                mstream.GetBuffer()
                                                mstream.Close()
b.)

Dim fileStream As New System.IO.MemoryStream()
                                                Dim byteImg As Byte()
                                                byteImg = File.ReadAllBytes( _
                                                  directory & filename & _
                                                  extension)
                                                fileStream.Write(byteImg, 0, _
                                                byteImg.Length)
                                                fileStream.Close()
Die Daten speichere ich dann wie folgt:

mysql_statement("INSERT INTO cam_attachements (" & _
  "`msg_id`,`user_id`,`attachement`,`extension`,`storage_datetime`,`fileHeader" & _
  ",`stream`) VALUES ('" & message_id & "','1','" & filename & "','" & _
  extension & "',UTC_TIMESTAMP(),'" & header & "','" & byteImg.ToString & "')")
Der Speichervorgang klappt tadellos.

Der Inhalt von "stream" sieht aber merkwürdig aus, egal, welches Bild verwendet wird, der "Streaminhalt" ist immer gleich (0x53797374656D2E427974655B5D)-> System.Byte[].

Habe auch schon probiert:

Public Function ByteArrayToString(ByRef Barr() As Byte) As String
        Return Convert.ToBase64String(Barr)
    End Function
Public Function ByteArrayToTextString(ByRef Barr() As Byte) As String
        Dim enc As System.Text.Encoding = System.Text.Encoding.Default
 
        Return enc.GetString(Barr)
    End Function
Was mache ich falsch?
Ich habe versch. Feldtypen verwendet, von Blob über Longblob etc.

Ist das ein Problem des Feldtypens oder der Art und Weise, wie ich das Bild auslese?

Danke und Gruß
Boris
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: ModeratorDaveS (Moderator)
Datum: 18.03.15 11:06

Mit File.ReadAllBytes() hast du schon ein Byte Array, mehr brauchst du nicht. Die Daten musst du dann als Bytes (varbinary Spalte) schreiben, nicht als String!

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Saftschubser
Datum: 18.03.15 12:08

Hi Dave,

danke für deine Rückmeldung.

Wenn ich via

Dim byteImg As Byte()
byteImg = File.ReadAllBytes(directory & filename & extension)
ein Byte Array erhalte, wie schreibe ich das dann korrekt in die DB?
Feld habe ich auf varbinary geändert (ist das nicht zu klein?).

Per byteImg.tostring?

Gruß
Boris
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Manfred X
Datum: 18.03.15 13:55

Hallo!

Für das Zusammenbauen oder Analysieren von Pfadangaben (Strings)
ist im Framework die IO.Path-Klasse zuständig.

Die Byte-Größe Deines JPEG-formatierten-Bildes hängt vom Qualitätsfaktor ab,
den Du als EncoderParameter beim Schreiben in einen Stream vorgeben kannst.
90-95: hohe Qualität, großes Bytearray
70-80: brauchbare Qualität
40-60: grenzwertige Qualität, kleines Bytearray
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: ModeratorDaveS (Moderator)
Datum: 18.03.15 17:51

Nochmal, vergiss die Strings. Anscheindend ist varbinary auf 65k begrenzt, eventuell brauchst du eine Blob-Spalte. Beispiele findest du in der MySql Doku. Hier, z.B. http://dev.mysql.com/doc/connector-net/en/connector-net-programming-blob-writing.html

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Saftschubser
Datum: 18.03.15 14:51

Ich weiss nicht, ob ich auf dem richtigen Dampfer bin.

Dim fs As FileStream = File.Open(directory & filename & extension, _
            FileMode.Open, _
            FileAccess.Read, _
            FileShare.None)
                                                fs = File.Open(directory & _
                                                  filename & extension, _
                                                  FileMode.Open)
                                                Dim b(1024) As Byte
                                                Dim temp As UTF8Encoding = New _
                                                  UTF8Encoding(True)
                                                Do While fs.Read(b, 0, _
                                                b.Length) > 0
                                                    MsgBox(temp.GetString(b))
                                                Loop
                                                fs.Close()
Liefert mir eine Exception, dass der Prozess nicht auf die Datei zugreifen kann, da sich diese in Verwendung befindet. Ich stehe etwas auf dem Schlauch.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Manfred X
Datum: 18.03.15 14:59

Lesen der Bytes einer Datei?
Es ist viel, viel schwieriger ...
Nämlich so ....
Dim byt() As Byte = IO.File.ReadAllBytes(<Pfad>)
Die Datei ist z.B. gesperrt, wenn das Bild in eine Bitmap geladen worden ist.
Näheres hier
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Saftschubser
Datum: 18.03.15 15:24

Danke für deine Geduld

Hatte nicht gesehen, dass ich etwas oberhalb das Image geladen habe, daher dann wohl der Fehler.

Allerdings stolpere ich von einer einem Problem zum nächsten.

Verwende ich den Einlesevorgang ins Array von dir, versuche ich dieses anschließend per StringBuilder zusammenzufügen, Testausgabe per Msgbox, mit dem Ergebnis, dass ich ein leeres Fenster erhalte.

 Dim imageByteArray() As Byte = IO.File.ReadAllBytes(directory & filename & _
   extension)
 
 
                                                Dim appendedString As New _
                                                  StringBuilder( _
                                                  imageByteArray.Length * 2)
                                                For Each part As Byte In _
                                                imageByteArray
                                                    appendedString.Append(part)
                                                Next
 
 
 
                                                MsgBox(appendedString.ToString( _
                                                  ))
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Manfred X
Datum: 18.03.15 15:33

Was willst Du denn machen?
Dave hat doch darauf hingewiesen, daß Du keine Zeichenfolge benötigst,
um ein Bild in der DB abzulegen.

Mir ist keine Überladung der System.Text.Stringbuilder-Klassen-Methode
append bekannt, die ein rohes Byte akzeptiert. Der Wert wird in eine
vorzeichenlose Ganzzahl umgewandelt (-> Zeichenfolge).

Die MsgBox zeigt Texte bis zu einer Länge von ca. 1000 Zeichen an.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Saftschubser
Datum: 18.03.15 15:39

Das hatte ich gelesen, dass ich das nicht benötige (was Dave eingangs geschrieben hatte).
Ich möchte im Grunde folgendes realisieren, der Inhalt eines Bildes soll in die DB geschrieben werden, damit ich den Inhalt später analysieren kann, z.B auf das Vorkommen der Angabe FFD8 im Header (zwecks Prüfung auf JPEG). Das kann natürlich auch zur Laufzeit erfolgen, soll anhand des Inhaltes in der DB auch später erfolgen können.

Daher ging ich davon aus, dass ich mir den "binären" Inhalt eines Bildes auch als HEX ausgeben lassen könne, um das per Auge prüfen zu können (Klartext in der DB), das war mein Gedanke.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Manfred X
Datum: 18.03.15 15:47

gomblisiert ....
VB kann aber hexen:
Dim hexstr As String = Hex(CByte(212))
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Saftschubser
Datum: 18.03.15 16:36

Konvertiere ich das ByteArray nun in HEX und speichere dies in einer DB (Blob Feld) dann dauert dies pro 100 kB Bild ca. 1 Minute bei 60 % CPU Auslastung. Daher fällt die HEX Geschichte nun aus.
Und das varbinary Feld dürfte dafür viel zu klein sein, daher fällt das auch aus.

Wenn es dafür nicht irgendeine "Superduperfunktion" gibt werde ich die Bilder schlicht auf HDD speichern müssen und auf eine nachträgliche Analyse verzichten müssen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Byte Array eines JPEG Bildes auslesen und in MySQL DB speichern 
Autor: Manfred X
Datum: 18.03.15 16:47

Wie groß sind Deine JPG-Bilddateien
(in Pixel und in Filelength [Byte])?

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel