Servlet日記(1999/09/12)

本日の成果

 引き続き、画像の動的な生成に挑戦です。先週はJIMIを使ってJPEG形式に変換しましたが、そのドキュメントの中に、Java2には変換のためのクラスが用意されているという記述があったので、調べてみました。

 あれこれ調べてみると、com.sun.image.codec.JPEGCodecを使うとよさそうに思えてきました。これを使うためにはBufferedImageに絵を描画しておく必要がありそうなのですが、その生成方法がよくわからないので、適当にやってみました。Frameとの関連付けもよくわからないので、行っていません。で、動かしてみると、ちゃんと動くようです。結果オーライですが、できてしまいました ^^; まあ、画像の動的な生成については、一応これで完了ということで。

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

import java.awt.image.*;
import java.awt.*;

public class ClockServlet extends HttpServlet {
  private double hourToRadian(int h, int m) {
    return Math.PI * (90.0 - ((h % 12) + m/60.0)*30.0)/180.0;
  }

  private double minuteToRadian(int m, int s) {
    return Math.PI * (90.0 - (m + s/60.0)*6.0)/180.0;
  }

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ServletOutputStream out = response.getOutputStream();

    BufferedImage image = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
    Graphics g = image.getGraphics();

    g.setColor(Color.white);
    g.fillRect(0, 0, 200, 200);

    GregorianCalendar calendar = new GregorianCalendar();
    int cHour   = calendar.get(Calendar.HOUR);
    int cMinute = calendar.get(Calendar.MINUTE);
    int cSecond = calendar.get(Calendar.SECOND);

    g.setColor(Color.black);
    g.drawArc(0, 0, 199, 199, 0, 360);
    g.drawLine(
      100,
      100,
      100+(int)(Math.cos(hourToRadian(cHour, cMinute))*40),
      100-(int)(Math.sin(hourToRadian(cHour, cMinute))*40));
    g.drawLine(
      100,
      100,
      100+(int)(Math.cos(minuteToRadian(cMinute, cSecond))*70),
      100-(int)(Math.sin(minuteToRadian(cMinute, cSecond))*70));
    g.drawLine(
      100,
      100,
      100+(int)(Math.cos(minuteToRadian(cSecond, 0))*90),
      100-(int)(Math.sin(minuteToRadian(cSecond, 0))*90));

    response.setContentType("image/jpeg");
    com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(out).encode(image);

    out.close();
    g.dispose();
  }

本日の教訓

 JPEGへの変換には、com.sun.image.codec.JPEGCodecを使おう。と言いながら、ちゃんとした使い方はよくわからないのですが ^^;

Servlet日記(1999/09/05) Servlet日記の目次 Servlet日記(1999/09/19)