java.awt.Image >> byte[] innerhalb Servlet

CHaoSlayeR

Erfahrenes Mitglied
Hi leutz,

ich habe da auch mal ein Problem. Ich habe schon das ganze Netz und so ziemlich alle Java-Foren danach abgeklappert, aber nichts gefunden, was mit weiterhilft...

...hier mein Problem:

Wie kann ich aus einem java.awt.Image ein Byte Array bekommen?

Folgendes ist meine Ausgangssituation:

1.) Bild (jpg, gif oder png) wird hochgeladen
2.) Bild wird vorbereitet und mittels byte[] in einem MySQL-Blob gespeichert
3.) das Bild kann ich mir auch in dem Browser anzeigen lassen, da ich aus dem Byte-Array nur in einem Servlet ein ByteArrayOutputSream machen muss (einfach)
4.) nun sollen aber an anderen Stellen der Web-Applikation auch die Bilder erscheinen, nicht in voller Größe, sondern als Thumbnails
5.) daher tu ich innerhalb eines anderen Servlets mir das Bild holen und tu es verkleinern mittels BufferedImage und dessen (von java.awt.Image) geerbte Methode "getScaledInstance()".
6.) mein Hauptproblem ist daher, dass ich von dieser Methode ein "Image" bekomme. Und das muss wieder in ein Byte-Array oder einen ByteArrayOutputStream zurück, damit ich das im Browser darstellen kann, ohne die exakte Bildkodierung zu kennen. Ich kenne zwar den MIME-Type des Bildes, die Höhe und Breite, allerdings hab ich selbst mit diesen Daten bei der Suche in den API's nach einem Converter oder ähnliches keinen Erfolg gehabt.

Brauche dringend eine Lösung für dieses Problem!

Danke schonmal für jeden Hnweis oder Lösungsvorschlag :)


Gruß, CHaoSlayeR
 
Hallo!

ich würde das ganze nur mit BufferedImages und ImageIO machen, aber hier eine Möglichkeit das ganze mit java.awt.Image erzeugt von toolkit zu machen:
Code:
/*
 * Created on 18.02.2005@11:47:19
 *
 * TODO Licence info
 */
package de.tutorials;

import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class Image2ByteArrayExample {

    public static void main(String[] args) {
        ImageIcon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(
                "c:/Beispiel.jpg"));

        BufferedImage img = new BufferedImage(icon.getIconWidth(), icon
                .getIconHeight(), BufferedImage.TYPE_INT_ARGB);

        img.getGraphics().drawImage(icon.getImage(), 0, 0, null);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            ImageIO.write(img,"jpg",baos);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        //someActionWith(boas);
    }
}

HTH,
Gruß Tom
 
Cool :) Danke schön!

Darauf wär ich ehrlich gesagt nicht gekommen. Mit AWT hatte ich bisher kaum Kontakt...

wunderbar und ist auch noch verhältnismäßig schnell... danke!

Gruß, CHaoSlayeR
 
Zurück