# Problem mit dem Import und Export von Bildern



## alex1511 (29. Jan 2013)

Hallo zusammen,

Ich schreibe zur Zeit an einer Verwaltungssoftware für ein Museum. Hierbei gibt es auch die Möglichkeit Exponate aus der Verwaltung zu Exportieren und diese anschließend, beispielsweise bei einem anderen Museum, wieder zu importieren. Nun ist es so, dass zu einem Exponat auch ein Bild gehört. Das Bild wird als VARBINARY in der Datenbank gespeichert. 

Für den Export wandel ich die Bilder in Strings. 
Das mach ich mittels Arrays.toString(bytearray).
Beim Import wandel ich den String mittels einer selbstgeschriebenen Methode wieder in ein byte[] um.

Der Quellcode dieser Methode lautet:


```
public static byte[] stringtoByteArray(String input) {

		input = input.replace("[", "");
		input = input.replace("]", "");

		String[] splitted_input = input.split(", ");
		int length = splitted_input.length;
		byte[] output = new byte[length];
		for (int i = 0; i != length; i++) {
			output[i] = Byte.valueOf(splitted_input[i]);
		}

		return output;
```

Leider sind alle importierten Bilder nach dem Import nur weiß. Und ich komm einfach nicht drauf, woran es das liegen kann. Die Methode wandelt es, zumindest augenscheinlich, korrekt um. Hat von euch jemand eine Idee, wo das Problem liegen könnte?

danke und Gruß, Alex


----------



## SlaterB (30. Jan 2013)

hab die Methode ausprobiert, sollte mit allen Bytes zurechtkommen, wie sieht denn die weitere Verarbeitung aus?
wird direkt in Java aus bytes ein Image-Objekt generiert? funktioniert das ansonsten schon nachweislich?

Images sind leider groß, schöner wäre es erst mit 10 Byte-Arrays zu arbeiten, aber wenn es sein muss:
nimm ein Bild welches funktioniert, lies es von der Festplatte in ein großes byte[] X ein, damit funktioniert der Rest der Verarbeitung?
aber mit dem byte[] Y aus dieser Methode nicht (übertragen, natürlich von selber Vorlage)?

vergleiche nun X und Y, gleich lang? vergleiche jedes byte, da muss dann ja irgendwo ein Unterschied bestehen,
verfolge zurück, woher das kam, wobei schwer vorstellbar, auf anderem Rechner doch sicher die gleiche Datei,
da verändern sich ja nicht mal eben die Bytes beim Kopieren

-----

allgemein könnte Base64 ? Wikipedia geeigneter sein


----------



## alex1511 (30. Jan 2013)

Hallo, danke für die Tips. Werde gleich noch weitere Informationen bei einer Kollegin einholen, die den Teil geschrieben hat, der die Bilder in ein byte[] umwandelt.
Was ich jedoch schonmal getestet habe ist die Base64-Kodierung. Leider führt dies zum selben ergebnis. Nämlich weiße Bilder. Benutzt habe ich die den commons-codec von Apache


----------



## SlaterB (30. Jan 2013)

> Leider führt dies zum selben ergebnis.

das muss keine schlechte Nachricht sein, 
Arrays.toString() mag 3x so viel Platz brauchen und stringtoByteArray() mit split und Parsen viel Arbeit machen,
aber es sollte letztlich genauso funktionieren,
wenn beides gleich reagiert ist vielleicht beides richtig, die Übertragung korrekt, 
der Fehler in anderen Programmteilen oder nicht passender Verknüpfung usw.

> Werde gleich noch weitere Informationen bei einer Kollegin einholen, die den Teil geschrieben hat, der die Bilder in ein byte[] umwandelt.

wie gesagt eher spannend, wie andersrum aus dem byte[] ein Bild wird, erst auf Festplatte gespeichert und normal eingelesen 
oder direkt im Arbeitsspeicher ein Image-Objekt aus den Daten? welcher Image-Typ?
allerdings hat die Datei zusäztlich wohl nur den Dateinamen als Information, Endung ".png", ".jpeg" usw., ob das allein schon was bewirkt?..


----------



## alex1511 (5. Feb 2013)

Letztendlich war es ein ziemlich blöder Fehler. Die Bilder blieben weiß, weil der Code nicht ausgeführt wurde. Grund war eine falsch gesetzte Schleifenklammer... 

Danke für die Hilfe!


----------

