01 import java.awt.*;
02 import java.awt.image.*;
03 import java.io.*;
04 import javax.servlet.*;
05 import javax.servlet.http.*;
06
07 import Acme.JPM.Encoders.*;
08
09 public class GreyScaleServlet extends HttpServlet {
10
11 public void doGet (HttpServletRequest req, HttpServletResponse res)
12 throws ServletException, IOException {
13 res.setContentType("image/gif");
14 ServletOutputStream out = res.getOutputStream();
15
16 // získame info o umiestnení obrázku
17 String source = req.getPathTranslated();
18 if (source == null) {
19 throw new ServletException("Chyba v umiestnení obrázku");
20 }
21
22 /* vytvoríme viacnásobne použiteľný frame, pričom
23 tentokrát nepotrebujeme volať metódu addNotify() */
24 Frame frame = new Frame();
25
26 // natiahneme obrázok do pamäte
27 Image image = Toolkit.getDefaultToolkit().getImage(source);
28 MediaTracker mt = new MediaTracker(frame);
29 mt.addImage(image, 0);
30 try {
31 mt.waitForAll();
32 }
33 catch (InterruptedException e) {
34 getServletContext().log("Chyba pri načítaní obrázka", e);
35 throw new ServletException(e.getMessage());
36 }
37
38 // zistíme rozmery obrázku
39 int width = image.getWidth(frame);
40 int height = image.getHeight(frame);
41
42 // obrázok preženieme cez filter
43 Image filtered = frame.createImage(new FilteredImageSource(image.getSource(),new GreyScaleFilter()));
44
45 // obrázok zakódujeme a pošleme
46 GifEncoder encoder = new GifEncoder(filtered, out);
47 encoder.encode();
48 }
49 }
|