package javacodebook.server.graphics; import Acme.JPM.Encoders.GifEncoder; import java.awt.*; import java.awt.image.*; import javax.servlet.*; import javax.servlet.http.*; /** * Ein Servlet, dass einen beliebigen Text als Grafik erzeugt und ausgibt. Der * Text wird als Parameter übergeben. */ public class HeadlineServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //den korrekten Content-Type setzen, damit der Browser die Grafik auch //richtig anzeigt. response.setContentType("image/gif"); //statt eines Writers muss ein Stream verwendet werden ServletOutputStream out = response.getOutputStream(); String text = "Text fehlt"; if(request.getParameter("text") != null) text = request.getParameter("text"); //Schriftart auswählen und Größe berechnen int fontSize = 24; Font font = new Font("Verdana", Font.BOLD, fontSize); FontMetrics fm = new Label().getFontMetrics(font); //Länge des Textes in Pixel berechnen int width = fm.stringWidth(text); //Schriftgröße als Höhe int height = fm.getHeight(); //Graphik erzeugen und Hintergrund weiss färben BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = image.createGraphics(); graphics.setColor(Color.white); graphics.fillRect(0,0,image.getWidth(), image.getHeight()); graphics.setColor(Color.black); //Schriftart, Antialias einstellen und String zeichnen lassen graphics.setFont(font); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics.drawString(text, 0,(height - (height-fontSize))); //Grafik als GIF kodieren und an den Browser schicken GifEncoder encoder = new GifEncoder(image, out); encoder.encode(); } }