JAI aus ByteArray erzeugtem RenderedOp fehlen width/height

bwagner

Grünschnabel
Ich habe ein Bild als byte[] vorliegen und benoetige die Angaben zu Breite und Hoehe. Im Unterschied zu der Erzeugung mittels File gibt folgender Weg Nullwerte fuer width/height.

Code:
	byte[] bytes = imageToByteArray();
	ByteArrayInputStream input = new ByteArrayInputStream(bytes);
	SeekableStream s = SeekableStream.wrapInputStream(input, true);
	RenderedOp image = JAI.create("stream", s);
        image.getWidth();

Gibt es einen Weg an diese Info zu kommen ohne andere Libs wie AWT zu benutzen?

Danke und Gruss,
Babette
 
Die Frage ist in welchem Format die binärdaten vorliegen? Auf alle Fälle, folgendes Snippet legt ein Bild zuerst komplett in den Speicher und liest von dort das Bild und nicht direkt über den FileInputStream:

Java:
        File file = new File("C:\\Temp\\SYSTEM_20101129_154536.jpg");
        InputStream is = null;
        try {
            // is = new FileInputStream(file);
            byte[] b = new byte[(int) file.length()];
            FileInputStream fis = null; 
            try {
                fis = new FileInputStream(file);
                fis.read(b);
            } finally {
                if(fis != null) {
                    try {
                        fis.close();
                    } catch(IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            is = new ByteArrayInputStream(b);
            BufferedImage bfImage = ImageIO.read(is);
            System.out.println("x=" + bfImage.getWidth() + ",y=" + bfImage.getHeight());
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            if(is != null) {
                try {
                    is.close();
                } catch(IOException e) {
                    e.printStackTrace();
                }
            }
        }

Es macht also keinen Unterschied ob ich als InputStream einen FileInputStream habe od. einen ByteArrayInputStream.
 
Zuletzt bearbeitet von einem Moderator:
Danke fuer Deinen Hinweis, irgendwas scheint aber doch anders zu sein.

Die Daten werden ueber Tomahawk t:inputFileUpload hochgeladen, liegen also als org.apache.myfaces.custom.fileupload.UploadedFile vor, dann benutze ich die Methode getBytes(), die mir ein byte[] liefert, welches ich in einen ByteInputStream packe.
 
Was für ein Bild wird den hochgeladen - welches Format? Ich nehme an Du hast ein Test-Bild (zB JPEG, GIF) das Du über ein HTML-Formular auswählst und an deinen Server schieckst?

Du kannst ja im ersten Schritt das Snippet oben auf dein Test-Bild anwenden. Wenn Du dann Breite und Höhe bekommst, kannst Du den Code vielleicht so in dein Servlet übernehmen.

Wenn Du dann keine Werte bekommst, solltest Du evtl. das byte-Array welches Dir die getBytes-Methode liefert auf die Festplatte speichern und mit deinem Test-Bild vergleichen. Eigentlich sollten diese ja 100% identisch sein und auch dein Bildbearbeitungsprogramm sollte das Bild darstellen können.
 
Zurück