勝手に Java リファレンス / グラフィックの生成と入出力

戻る

Java でのグラフィック入出力事情

 この記事を書いている段階では、JDK1.4.1が最新JDKですが、幸いなことに、JDK1.4以降から、ImageI/O というAPIが用意されました。基本的には、これを使用するのがよいと思います。

 ただ、残念ながら、2002年12月現在、ImageI/Oでは、GIFでの書き込みを標準ではサポートしていません。(GIF対応のプラグインを追加する必要がありますが、私の知る限りでは、まだ対応プラグインは出ていません。)
 これは、米Unisys社保有のLZW圧縮特許がGIF形式画像の生成に利用されているためと思われます。
 私の記憶が確かであれば、2003年ごろ、この特許が期限切れになるはずですので、来年の終わりくらいには、事情も変わっているかもしれません。
 つまり、JDKの標準APIだけで、画像を出力するのであれば、JPEG / PNG 形式を利用することになります。
 確かに3年くらい前だと、ブラウザのPNG対応が不完全だったりもしましたが、最近は、事情が変わってきていますので、個人サイトレベルであれば、思い切って導入してもいいのではないかと思います。

 古いブラウザのPNG対応については、COCKYさんが詳しくまとめてらっしゃいますので参照してください。
 COCKYさんの表に入っていない新しいブラウザでは、ほぼ対応しています。

 また、その昔は、ACME Laboratories で公開されている、Acme.JPM.Encoders.GifEncoder を使用してGIFを生成していたケースもあったようです。


Java ImageI/O
  • 入出力サンプル

     以下のコードは、ReadSample.gif ファイルを読み込んで、WriteSample.png に変換し、保存します。
     いたって簡単です。

    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File; class ImageIOFormatConversion {
    public static void main(String[] args) throws Exception {
    BufferedImage bi = ImageIO.read(new File("ReadSample.gif"));
    ImageIO.write(bi, "png", new File("WriteSample.png"));
    }
    }

  • カスタムグラフィックを動的生成してPNGで保存する

     自作のカスタムグラフィックをPNGで保存する場合は、上のコードの画像読み込み部分が、画像生成コードに置き換わる形になります。
     具体的には、BufferedImage を生成して、そこにJava2Dなどで描画し、それをImageI/Oで保存するだけです。
     Java2Dについては、次のセクションを参照してください。



Java2D によるグラフィック生成
 Java 2Dは、アンチエイリアス機構を搭載した、非常に強力なグラフィックAPIです。
 ここでは、詳しく説明しませんが、以下に参考になりそうなサイトへのリンクを張っておきます。
 特に、Java 2D(TM) Sample Programs は非常に役に立ちます。是非一度見ておきましょう。

SUN Java2D 日本語によるJava 2D ガイド
APIガイドへのリンクもあります。
Java2D(TM) API Home Page Java 2D APIの公式サイト(英語)
Java 2D Sample Page ここの、「Java 2D Demo」の 「Plugin」を見てみてください。
Java 2Dで何ができるのかがわかります。
Java 2D(TM) Sample Programs Java2Dの個々の機能毎に、実際に動作するPluginとソースコードが公開されています。
英語ですが、絶対に見る価値があります。