Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

JSP/サーブレットでイメージを生成する

サーバサイドではじめるJavaグラフィック講座 1

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/02/20 00:00

最近ではWeb開発が主流になりつつあり、初めてJavaで学んだのがJSP/サーブレットだったという人も多いことでしょう。この場合「グラフィック」分野がなおざりになりがちですが、今後Webにおいてもそれらの処理をサーバサイドで行う機会が増えてくると思われます。本連載では、サーバサイドのJavaビギナーを対象にグラフィック処理の再入門を行います。

目次

はじめに

 その昔、プログラミングの入門と言えば、スタンドアロンなアプリケーションの作成から入るのが常道でした。が、時代は変わります。インターネット、特にWebの発達により、「初めてのプログラミングがWeb関係だった」という人はずいぶんと多くなりました。

 Javaの世界でも、これは顕著です。「初めてJavaに触れる人間が、最初に学ぶのがJSP/サーブレットだった」なんてケースも、今では半ば当たり前になりつつあるようです。が、サーバサイドの開発中心だと、どうしてもなおざりになってしまう分野というのがあります。それは「グラフィック」です。

 最近は、Webといえども「テキスト中心の世界」とは言えなくなってきています。グラフィック関連の処理をサーバサイドで行なわなければならない事態は、この先、必ず増えてくることでしょう。そこで、サーバサイドのJavaビギナーに向け、グラフィックの基本利用についてまとめていきましょう。

対象読者

  • Javaの基本およびJavaによるWeb開発の基礎(JSP/サーブレット程度)をマスターしている人。
  • グラフィック関連のプログラミング経験があまりない人。
  • Javaのグラフィック処理を学び直したい人。

グラフィック関連のパッケージとクラス

 まず、Javaに用意されているグラフィック関連のクラスについて説明しておきましょう。なお、ここではJ2EE 1.4で使われているJava 5をベースに説明を行います。

  • ビットマップイメージに関するクラス
  • java.awt.Image
    java.awt.image.BufferedImage
  • グラフィックコンテキスト・クラス
  • java.awt.Graphics
    java.awt.Graphics2D
  • イメージの読み書きに関連するクラス
  • javax.imageio.ImageIO
  • イメージ関連のパッケージ
  • java.awt.imageパッケージおよびその下のもの
    javax.imageioパッケージおよびその下のもの

 意外とたくさんのクラスやパッケージが用意されているのに驚いたかもしれません。多少はGUIを使った処理を書いたことがあるなら、ImageBufferedImageGraphicsあたりのクラスは知っているかもしれませんね。

 この他、イメージファイルに関するものとして、ImageIOクラスが多用されます。また、java.awt.imageパッケージはBufferedImageやイメージの処理に関連する各種のクラスを、javax.imageioパッケージはImageIOやイメージファイルに関連する各種クラスをそれぞれパッケージに持っています。この他、java.awtパッケージ内のColorFontなど、イメージ関連の処理で用いられるクラスはたくさんあります。

AWTとSwing

 このjava.awtというパッケージは「AWT」と呼ばれるJava標準のGUIフレームワークに関するものです。AWTは「Abstract Winddowing Toolkit」の略で、ウインドウやメニューなどのGUIを使ったプログラムを作成する際に必要となるものがまとめられています。

 Javaには、このAWTの他に「Swing」というGUIフレームワークもjavax.swingパッケージとして用意されていますが、グラフィック関係に絞っていえば、基本はAWTと同じでjava.awt内のクラスを利用します。

 一度にこれらすべてを理解するのは到底無理でしょうから、まずは最も基本となる「Image」「BufferedImage」「Graphics」の3つのクラスを使った、グラフィックとイメージの基本利用から理解していくのが良いでしょう。また、ここで取り上げるグラフィック関連のクラス類はAWTやSwingといったGUIのパッケージに用意されているものですが、これらのGUIと併用しなければならないというわけではありません。サーバサイドのように、GUIを一切使わないプログラムでも、グラフィック関連の機能だけを利用することは可能です。

一般的なAWTにおけるグラフィックの利用

 既にGraphicsクラスの基本ぐらいは分かっている、という人も多いでしょうが、一応、一般的なグラフィックの利用例として、AWTによるGUIを使った、ごく単純なアプレットのソースを上げておきます。赤から青へグラディエーションされたイメージを作成し表示するものです。

package jp.tuyano.codezine;

import java.applet.Applet;
import java.awt.*;

public class SampleApplet extends Applet {
    private static final long serialVersionUID = 1L;
    
    public void paint(Graphics g){
        for(int i = 0;i < 16;i++)
            for(int j = 0;j < 16;j++){
                Color c = new Color(i * 16,0,255 - j * 16);
                g.setColor(c);
                g.fillRect(i * 16, j * 16, 16, 16);
            }
    }
}
アプレットビューワでアプレットを表示したところ。青から赤へグラディエーション表示する簡単なサンプルだ。
アプレットビューワでアプレットを表示したところ。青から赤へグラディエーション表示する簡単なサンプルだ。

 ここで行なっているのは、「paint」というメソッドのオーバーライドです。GUI利用のプログラム(AWT、Swingを利用したもの全般)では、利用するコンポーネントやコンテナには必ずこのpaintメソッドまたはそれに相当するメソッドが用意されています。これは、コンポーネントの表示を更新するとき、必要に応じて呼び出されます。従って、ここに描画に関する処理を用意しておけば、必要があると自動的に実行され画面に表示されるわけです。

 この種のメソッドは、一般にjava.awt.Graphicsインスタンスを引数に持ちます(正確には、実はGraphicsではないのですが……これについては改めて)。Graphicsクラスは、グラフィックコンテキストの描画処理をカプセル化したものです。ここに用意されている描画用のメソッドを呼び出すことで、そのコンポーネントに図形やイメージを描画することができます。従って、AWTなどのGUIプログラムの場合、グラフィックの利用というのは「Graphicsクラスの使い方を覚える」ということであり、それ以外はあまり重要ではありません。

 また、基本は「画面への表示」ですから、イメージファイルへのアクセスや、データの送受といった操作はとりあえず不要です。いずれそうしたことを行う必要が生じることでしょうが、単にグラフィックを利用するだけなら、それらの知識はなくとも問題ないのです。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

バックナンバー

連載:サーバサイドではじめるJavaグラフィック講座
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5