Input/Output Buffered Image zu Byte Array und zurück konvertieren

Alan47

Mitglied
Hallo Leute,

ich arbeite gerade an einer Applikation, die eine Datenbank verwenden soll. Auf derselbigen möchte ich kleinere Bilder als BLOBs speichern, entsprechend muss ich in Java die Bilder in zwei Richtungen konvertieren:

1) Von Buffered Image nach Byte array. Das mache ich so:

Java:
	private byte[] getImageByteData(final BufferedImage image) {
		WritableRaster raster = image.getRaster();
		DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
		return buffer.getData();	
}


2) Vom Byte-Array zurück zum Buffered Image. Das ist mein Code:

Java:
	public BufferedImage getImage(byte[] bytes) {
		ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
		try {
			BufferedImage image = ImageIO.read(byteArrayInputStream);
			byteArrayInputStream.close();
			return image;
		} catch (IOException e) {
			System.err.println("Bild konnte nicht geladen werden!");
			return null;
		}
	}


Das Problem ist: wenn ich ein BufferedImage in ein Byte-Array umwandle und das Byte-Array dann mit obiger Methode zurück in ein BufferedImage transformieren möchte, liefert mir die Methode immer null zurück (wohlgemerkt: die IOException fliegt nicht, die angegebene Fehlermeldung erscheint nicht auf der Konsole).

Was ich sagen kann ist, dass die Konvertierung vom BufferedImage zum Byte-Array vermutlich funktioniert (ich hab mir das Byte-Array mal ausgeben lassen, die Hex-Werte stimmen mit den Farbwerten der Pixel überein).

Ich hab mal in die API geschaut, da steht bei "ImageIO.read(InputStream)", dass null zurückgegeben wird, falls kein ImageReader das Format des Bildes kennt. Kann es sein dass es daran liegt? Ich versuche eine ganz herkömmliche, unkomprimierte .bmp-Datei zu konvertieren. Mit .jpg hab ich das selbe Ergebnis: es kommt beim rückkonvertieren immer null zurück...

Kann es sein dass die beiden Methoden einfach nicht zueinander kompatibel sind? Gibt's einfachere Lösungen? Oder war ich schlicht zu dumm...? Ich sitze hier seit Stunden und weiß wirklich nicht mehr weiter :bahnhof:


Gruß,


Alan
 
A

awda23ws23

Gast
Habe ma sowas für Hibernate gemacht. Das müsste das Gesuchte drin sein

Java:
public class ImageUserType implements UserType
{
private static Logger logger=Logger.getLogger(ImageUserType.class);

public int[] sqlTypes()
    {
    return new int[]
                {
                Types.BLOB
                };
    }

public Class returnedClass()
    {
    return Image.class;
    }

public boolean isMutable()
    {
    return false;
    }

public Object deepCopy(Object o) throws HibernateException
    {
    return o;
    }

public Serializable disassemble(Object o) throws HibernateException
    {
    return (Serializable)o;
    }

public Object assemble(Serializable o,Object arg1) throws HibernateException
    {
    return o;
    }

public Object replace(Object o,Object arg1,Object arg2) throws HibernateException
    {
    return o;
    }

public boolean equals(Object arg0,Object arg1) throws HibernateException
    {
    if(arg0==arg1)
        {
        return true;
        }
    if(arg0==null||arg1==null)
        {
        return false;
        }
    return arg0.equals(arg1);
    }

public int hashCode(Object o) throws HibernateException
    {
    return o.hashCode();
    }

public Object nullSafeGet(ResultSet rs,String[] names,Object arg2) throws HibernateException,SQLException
    {

    Blob blob=rs.getBlob(names[0]);
    if(blob==null)
        {
        return null;

        }
    else
        {
        return convertByteToImage(blob.getBytes((long)1,(int)blob.length()));
        }
    }

public void nullSafeSet(PreparedStatement st,Object image,int index) throws HibernateException,SQLException
    {
    st.setBytes(index,convertImageToBlob((Image)image));
    }

private byte[] convertImageToBlob(Image image)
    {
    if(image==null)
        {
        return null;
        }
    ByteArrayOutputStream baos=new ByteArrayOutputStream();
    try
        {
        int width=image.getWidth(null);
        int height=image.getHeight(null);
        BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        bi.getGraphics().drawImage(image,0,0,null);
        ImageIO.write(bi,"JPEG",baos);
        }
    catch(IOException ex)
        {
        logger.error("Fehler beim erzeugen des Bytearrays: "+ex.getMessage());
        }
    return baos.toByteArray();
    }

private Image convertByteToImage(byte[] bytearray)
    {
    Image image=Toolkit.getDefaultToolkit().createImage(bytearray);
    JFrame frm=new JFrame();
    MediaTracker mt=new MediaTracker(frm);
    mt.addImage(image,0);
    try
        {
        mt.waitForAll();
        }
    catch(InterruptedException ex)
        {
        logger.error("Fehler beim erzeugen des Image: "+ex.getMessage());
        }
    return image;
    }

}
 

Alan47

Mitglied
Hi,

vielen vielen VIELEN Dank für diese Antwort! Du GLAUBST ja gar nicht wie schwierig so ein Code-Snippet im ganzen weiten Web zu finden ist!! Es läuft jetzt zwar alles über Image und nicht mehr über BufferedImage (leider lassen sich Images nicht ohne weiteres in BufferedImages konvertieren) aber für meine Anwendung spielt das praktisch keine Rolle.

Vielen Dank nochmal, das rettet mir heute den Tag :)

Gruß


Alan
 
A

awda23ws23

Gast
"(leider lassen sich Images nicht ohne weiteres in BufferedImages konvertieren) "

Zeile 90-94
 

Alan47

Mitglied
o_O

Das hab ich ganz übersehen! War so happy dass es endlich funktioniert hat dass mir dieses kleine Detail entgangen ist... ich hab im Internet mal danach gesucht, es gibt Leute die da Codes mit mehreren hundert Zeilen schreiben was du da in vier Zeilen abgehandelt hast... beeindruckend :) - und ein super Trick noch nebenbei, den leg' ich in meine "Trick 17"-Kiste ^_^


Gruß,


Alan
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Buffered Image teilweise zeichnen Allgemeine Java-Themen 6
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
Joker4632 Klassen Buffered Reader liest die Leerzeichen am Zeilen Ende nicht mehr Allgemeine Java-Themen 2
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
Y Wie bekomme ich durch getImage an das Image heran? Allgemeine Java-Themen 1
J jsch direktes streamen in ein image Allgemeine Java-Themen 11
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
T 2D-Grafik Chart als Image erstellen Allgemeine Java-Themen 3
G Image in Shape wandeln Allgemeine Java-Themen 1
T Swing Image rotieren Allgemeine Java-Themen 1
I nach Image Load in ListView, kann Ordner nicht mehr gelöscht werden Allgemeine Java-Themen 1
C pfad vom Image ausgeben lassen Allgemeine Java-Themen 5
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
M Image auslesen Allgemeine Java-Themen 2
G Pixelanzahl aus Raw Image Datei Allgemeine Java-Themen 1
H OCR und Image Processing Allgemeine Java-Themen 4
M Image für PDF nicht verfügbar - Runnable .jar Allgemeine Java-Themen 3
S BLOB Image in JSP anzeigen Allgemeine Java-Themen 5
BRoll Image RGB Werte auslesen und vergleichen Allgemeine Java-Themen 8
K Image zu BufferedImage konvertieren Allgemeine Java-Themen 9
K Image beim catchen ist immer null Allgemeine Java-Themen 9
X Image Processing libary für JavaSE und Android Allgemeine Java-Themen 2
Crashbreaker RCP-View Image öffnen und darstellen Allgemeine Java-Themen 7
S IMAGE ARRAY laden Allgemeine Java-Themen 6
B Image oder GridControl? Allgemeine Java-Themen 8
B Image Thinning Allgemeine Java-Themen 3
F Datentypen Floppy-Image-Dateisystem Allgemeine Java-Themen 5
F Image - Ausschnitt bekommen Allgemeine Java-Themen 3
J Teil eines Image/ImageIcon zeichnen Allgemeine Java-Themen 2
N Unable to convolve src image Allgemeine Java-Themen 7
H image in jtextarea/JLabel einbinden... Allgemeine Java-Themen 4
Aigu Bilderkennung / Image Analysis Allgemeine Java-Themen 2
M Nochmal I-Frame zu Image Allgemeine Java-Themen 4
M JPEG Image komprimieren Allgemeine Java-Themen 2
M Probleme mit Image Extraction aus PDF Allgemeine Java-Themen 2
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
G sun.awt.image.OffScreenImage Serializable machen Allgemeine Java-Themen 5
T Image in gif umwandeln Allgemeine Java-Themen 14
G itext größe von image Allgemeine Java-Themen 2
T JPanel to Image? Allgemeine Java-Themen 6
K Image Resizer Allgemeine Java-Themen 4
D Image runterscalieren, aber schlechte Quali? Allgemeine Java-Themen 3
P Image erzeugen Allgemeine Java-Themen 7
B Image libraries Allgemeine Java-Themen 3
MQue Image über Komponente Allgemeine Java-Themen 3
P Image auf JPanel auf JFrame Allgemeine Java-Themen 3
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
E Image unterscheiden Allgemeine Java-Themen 16
E Image auf einem JLabel darstellen Allgemeine Java-Themen 3
F BufferedImage -> Image Allgemeine Java-Themen 4
E Wie bekomme ich mein Image in das Fenster Allgemeine Java-Themen 2
T Muster/Zeichen/Texterkennung auf einem Image Allgemeine Java-Themen 9
L Linien, Recktecke und Elipsen zeichnen ohne Image Allgemeine Java-Themen 2
T Disk Image Library (iso,mdf,nrg,bin) Allgemeine Java-Themen 6
S KeyListener! Image Problem! Allgemeine Java-Themen 2
S Image als Background Allgemeine Java-Themen 5
B Image(png) versenden Allgemeine Java-Themen 3
N Image -> cropImage Allgemeine Java-Themen 3
T Image mithilfe von DirectColorModel und Pixel erstellen Allgemeine Java-Themen 3
G Image in der Größe ändern Allgemeine Java-Themen 2
C probleme mit image Allgemeine Java-Themen 4
C Pixelfarbe aus einem image auslesen Allgemeine Java-Themen 6
M Image Skalieren Allgemeine Java-Themen 23
D ByteArray für Image-Icon laden. Allgemeine Java-Themen 4
T iso datei (Image) mit Java einlesen und Inhalt entpacken Allgemeine Java-Themen 3
O Image mit transparenten farben wie bei *.GIF ? Allgemeine Java-Themen 3
B Image#getScaledInstance & Graphics2D#drawImage ClassCast Allgemeine Java-Themen 3
H Speicher freigeben klappt nicht bei Image Objekten, warum? Allgemeine Java-Themen 8
H Skalieren von Image -> java.lang.OutOfMemoryError - WARUM Allgemeine Java-Themen 18
T Auf ein Image geklickt Allgemeine Java-Themen 13
J ISO image erzeugen Allgemeine Java-Themen 3
J Wie mache ich den Hintergrund einer Image durchsichtig? Allgemeine Java-Themen 7
G Aus JPanel Image Hohlen Allgemeine Java-Themen 3
D BufferedReader in image umwandeln Allgemeine Java-Themen 3
S Image Datei serializieren Allgemeine Java-Themen 3
G JFrame nimmt mein Image nicht Allgemeine Java-Themen 2
F Image als GIF oder JPEG abspeichern Allgemeine Java-Themen 2
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
Thallius unsigned byte Allgemeine Java-Themen 18
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
kodela Datentypen byte als unsigned interpretieren Allgemeine Java-Themen 23
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
TheWhiteShadow 2D-Grafik GIF Library mit byte output Allgemeine Java-Themen 10
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
A Byte zu String Allgemeine Java-Themen 4
RalleYTN Datentypen Unsignierter Byte zum signierten Byte Allgemeine Java-Themen 2
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
R Byte Array Zeichensuche Allgemeine Java-Themen 6
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
O Byte-Array zu String Allgemeine Java-Themen 7
D Decodierung von Mp3-byte[] Allgemeine Java-Themen 4
A ByteBuffer.get(byte[] dst,int offset,int length) Allgemeine Java-Themen 2
A RandomAccessFile.read(byte[] b) Allgemeine Java-Themen 9
P Datentypen Warum überhaupt Byte ? Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben