Geänderte Bildanzeige mit Java

cengizhdde

Mitglied
Hallo zusammen,

über die dynamische Bildbearbeitung mit Java + BufferedImage habe ich zwar einiges an Hilfe finden können (z. B.: http://www.tutorials.de/forum/swing-awt-swt/209425-bufferedimage-groesse-veraendern.html), allerdings gelingt es mir nicht die Bilder auf der Webseite anzuzeigen.

Mein Anliegen: Ich möchte JPEG-Dateien, deren URL ich über das Internet einlese, in veränderter Form (Änderung der Bild-Dimension) auf meiner Webseite anzeigen, um für alle Bilder eine einheitliche Breite/Höhe zu gewährleisten. Die JPEG-Bilder werden allerdings nicht auf die Festplatte geschrieben (Anzeige der Bilder direkt nach dem Einlesen mittels der URL)!.

Meine Umgebung: Java v1.5 + Tomcat v5.5.9; IDE = MyEclipse v4

Hier mein bisheriger Java-Code:

import java.net.URL;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.awt.Image;
import java.awt.Graphics;
import javax.servlet.ServletResponse;
import javax.servlet.ServletOutputStream;
import org.zkoss.zk.ui.*;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public void drawJpegImage(String _url) {
String imgUrl = _url;
URL url = new URL(imgUrl);
BufferedImage bufImg = null;

try {
bufImg = ImageIO.read(url);
} catch (Exception e) {
;
}

ServletResponse response = (ServletResponse)Executions.getCurrent().getNativeResponse();
response.setContentType("image/jpeg");

BufferedImage image = null;

if(bufImg != null) {
Image img = bufImg.getScaledInstance(60,60, BufferedImage.SCALE_SMOOTH);
image = new BufferedImage(60,60,BufferedImage.TYPE_INT_RGB);

if(image != null) {
Graphics g = image.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
ServletOutputStream out = response.getOutputStream();
JPEGImageEncoder encoder= JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}
}
}

In der Zeile "JPEGImageEncoder encoder = ...." erhalte ich folgende Fehlermeldung:

java.lang.IllegalStateException: getWriter() has already been called for this response
org.apache.catalina.connector.Response.getOutputStream(Response.java:565)
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:171)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
bsh.Reflect.invokeMethod(Unknown Source)
bsh.Reflect.invokeObjectMethod(Unknown Source)
bsh.Name.invokeMethod(Unknown Source)
bsh.BSHMethodInvocation.eval(Unknown Source)
bsh.BSHPrimaryExpression.eval(Unknown Source)
bsh.BSHPrimaryExpression.eval(Unknown Source)
bsh.BSHVariableDeclarator.eval(Unknown Source)
bsh.BSHTypedVariableDeclaration.eval(Unknown Source)
bsh.BSHBlock.evalBlock(Unknown Source)
bsh.BSHBlock.eval(Unknown Source)
bsh.BSHBlock.eval(Unknown Source)
bsh.BSHIfStatement.eval(Unknown Source)
bsh.BSHBlock.evalBlock(Unknown Source)
bsh.BSHBlock.eval(Unknown Source)
bsh.BSHBlock.eval(Unknown Source)
bsh.BSHIfStatement.eval(Unknown Source)
bsh.BSHBlock.evalBlock(Unknown Source)
bsh.BSHBlock.eval(Unknown Source)
bsh.BshMethod.invokeImpl(Unknown Source)
bsh.BshMethod.invoke(Unknown Source)
bsh.BshMethod.invoke(Unknown Source)
bsh.Name.invokeLocalMethod(Unknown Source)
bsh.Name.invokeMethod(Unknown Source)
bsh.BSHMethodInvocation.eval(Unknown Source)
bsh.BSHPrimaryExpression.eval(Unknown Source)
bsh.BSHPrimaryExpression.eval(Unknown Source)
bsh.Interpreter.eval(Unknown Source)
bsh.Interpreter.eval(Unknown Source)
org.zkoss.zk.ui.impl.bsh.BshInterpreter.interpret(BshInterpreter.java:108)
org.zkoss.zk.ui.impl.PageImpl.interpret(PageImpl.java:565)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:373)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:360)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:393)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:353)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:262)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:208)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:158)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:108)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Lasse ich diese Zeile weg, kommt zwar keine Fehlermeldung, die Bilder werden allerdings nicht angezeigt. In anderen Foren habe ich gelesen das es so wie ich es oben codiert habe (eigentlich) funktionieren soll.

Danke im voraus und Gruss,
Cengiz
 
Zurück