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 }