JSP: Vytváření JPEGu za běhu - vyhazuje vyjímky, nechodí česky

Martin Kuba makub na ics.muni.cz
Úterý Leden 27 14:26:08 CET 2004


Zúber Martin wrote:
> Dobrý den,
> 
> pokouším se vytvořit JPEG za běhu tak, aby se dal do JSP stránky nacpat odkaz na obrázek přes <img src="picture.jsp" />. Udělal jsem soubor picture.jsp:
> 
> <%@page contentType="image/jpeg" import="java.awt.image.*,java.awt.*,com.sun.image.codec.jpeg.*, java.io.*" %>
> <%
>     Graphics pie;
>     BufferedImage bf = new BufferedImage(400, 300, 1);
>     pie = bf.getGraphics();
>     pie.drawLine(0, 290, 400, 290);
>     pie.drawLine(10, 0, 10, 300);
>     pie.setFont(new Font("Dialog", Font.BOLD, 10));
>     pie.drawString(new String("GRAPH"), 20, 20);
>     
>     JPEGImageEncoder enc;
>     try {
>         enc = JPEGCodec.createJPEGEncoder(response.getOutputStream());
>         enc.encode(bf);
>         enc.getOutputStream().close();
>     }
>     catch(Exception e) {}
> %>
> 
> Obrázek to sice udělá, ale:
> 1) vyhodí to na mě haldu vyjímek (laděno v NetBeans s interním Tomcatem)
> 
> java.lang.IllegalStateException: getOutputStream() has already been called for this response
>         at org.apache.catalina.connector.ResponseBase.getWriter(ResponseBase.java:750)
>         at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:165)
> 	...
> 
> Je mi z výpisu jasné, že už je metoda getOutputStream jednou volána - ale jak tedy do toho OutputStreamu zapíšu já?
> 
> 2) Nechodí mi při volání metody Graphics.drawString čeština, tam jsem si ani neškrt.
> 
> Poradí mi někdo?

Pouzivat pro generovani obrazku JSP stranku neni nejlepsi napad,
radeji pouzijte servlet. Pokud nechcete jit do servletu,
aspon se ujistete, ze nemate zadne znaky navic (mezery, konce radku)
kolem direktiv <% %>

Kdyz jsem si naposled hral s generovanim obrazku v servletu,
delal jsem to takto:

BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
g.setColor(Color.red);
g.drawLine(0, 0, width, height);
Font muj= new Font("Times New Roman",Font.PLAIN,15);
g.setFont(muj);
g.drawString("a\u00e1bc\u010dd\u010fe\u00e9\u011bfghi\u00edjklmn\u0148o\u00f3pqr\u0159s\u0161t\u0165u\u00fa\u016fvwxy\u00fdz\u017e",20,20);
ImageIO.write(image,"jpg",out);

makub
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: makub na ics.muni.cz
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------
------------- další část ---------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3415 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://amaio.cz/pipermail/konference/attachments/20040127/99fb9ada/attachment.bin>


Další informace o konferenci Konference