【入門者向け】Javaにおける画像の扱い方を分かり易く解説

  • このエントリーをはてなブックマークに追加
  • Pocket

Javaで画像を扱う際の方法について、ここでは画像の表示から画像への文字入れなどの方法を紹介する。

Javaの画像の扱い方

Javaの画像を扱うためにImageIOクラスを使う。このクラスには画像をファイルから読み込んだり、指定したファイルに書き込んだりするクラスメソッドが用意されている。この時、画像データは画像ファイルとして保存するために標準画像フォーマットに従ってエンコードやデコードされる。

例えば、デジタルカメラで撮影された画像は、JPEGと呼ばれるフォーマットで保存される。ここでいうフォーマットとは画像をどのように圧縮するかを決める仕様のことである。また、デコードとは、あるフォーマットに変換されたデータを元の画像データに戻すことである。ImageIOクラスのreadメソッドを使えば、画像ファイルから読み込んだデータをデコードしてBufferedImageクラスのオブジェクトとして読み込むことができる。

基本的な書き方はこうだ。

読み込まれた画像を画面に表示するために、JavaのSwingが使われる。Swingはグラフィカルなユーザ・インタフェースを開発するためのツールである。そのSwingを使えば読み込んだ画像は画面にそのまま表示することができる。

また、読み込んだ画像データ(BufferedImageクラスのオブジェクト)に線を引いたり、文字を書き込んだりするにはBufferedImageクラスのオブジェクトからGraphics2Dクラスのオブジェクトを作って、Graphics2Dクラスのオブジェクトに線を引いたり文字を書き込んだりする。このようにすると、画像に書き込んだ線や文字が上書きされる仕組みになっている。

エンコードとは、元の画像データを圧縮するために、目的のフォーマットのデータに変換することである。ImageIOクラスのwriteメソッドを使えばBufferedImageクラスのオブジェクトとして作られた画像データをエンコードして書き込むことができる。

基本的な書き方はこうだ。

ImageIOクラスのwriteメソッドは、画像を保存するために使用可能な標準画像フォーマットをいくつか選択できる機能を提供している。それぞれ特徴があるので目的にあったフォーマットを選ぶことが出来る。

フォーマット名

読み込み

書き込み

JPEG

PNG

BMP

WBMP

GIF

では、実際にサンプルプログラムで見てみよう。

画像をファイルから読み込むサンプルプログラム

このサンプルは、画像ファイルを読み込んでそのまま画面に表示している。画面に「Save」ボタンが表示されるが、画像は保存されない。ただ表示するだけである。

このプログラムは、二つのクラスから構成されている。ReadImageUserInterfaceクラスはSwingを使ったユーザ・インタフェースである。

もうひとつは、画像を読み込んで表示するReadImageComponentクラスである。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしていこう。

  • [1] ReadImageUserInterfaceクラスを定義する。
  • [2] ReadImageComponentクラスの参照変数componentを宣言する。
  • [3] コンストラクタを定義する。
  • [4]-[6] 表示する画面のタイトル、大きさ、レイアウトの設定を行う。
  • [7]-[9] 画像を表示するコンポーネントを追加する。
  • [10]-[11] 「Save」ボタンを追加する。
  • [20] actionPerformedメソッドを定義する。
  • [21] 「Save」ボタンが押された時に、画像を保存するwriteメソッドを呼び出す。
  • [30] mainメソッドを定義する。
  • [31] ReadImageUserInterfaceクラスのreadImageUserInterfaceオブジェクトを作る。
  • [32] クローズボタンが押された時にウインドウを閉じるための処理をwindowAdapterとして定義する。
  • [32] readImageUserInterfaceオブジェクトにwindowAdapterを追加する。
  • [33]-[34] 画面を表示する。
  • [100] Componentクラスを継承してReadImageComponentクラスを定義する。
  • [101] BufferedImageクラスの参照変数bufferedImageを宣言し、nullで初期化する。
  • [102] コンストラクタを定義する。
  • [103]-[107] JPEG画像を読み込んで、その画像を持つbufferedImageオブジェクトを作る。
  • [110] paintメソッドを定義する。
  • [111] 画像を表示する。
  • [120] getPreferredSizeメソッドを定義する。
  • [121]-[128] 画像が読み込めれば、画像に合わせたサイズに画面の大きさを設定する。もし画像が読み込めなければ、幅:100、高さ:100のサイズに画面を設定する。
  • [130]-[131] 空のwriteImageメソッドを定義する。

画像に線や文字を書き込むサンプルプログラム

このサンプルは、画像ファイルを読み込んだ後、画像に四角で囲んだ「RED ROSE」の文字を表示している。

このプログラムは、二つのクラスから構成されている。ReadImageUserInterfaceクラスはSwingを使ったユーザ・インタフェースである。この部分は、前のセクションとほぼ同じであるが、ReadImageUserInterfaceクラスの中で、componentオブジェクトを作るところをReadImageComponent クラスからPaintImageComponentクラスに書き換えている。

もうひとつのクラスは、画像を読み込んで表示するPaintImageComponentクラスである。このクラスは、ReadImageComponent クラスを継承していている。

このため画像を表示するpaintメソッド以外の処理はReadImageComponent クラスと同じである。ただし、paintメソッドをオーバーライドして書き換えているので、画像に四角で囲んだ「RED ROSE」の文字が表示される。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしていこう。

  • [7]-[9] 四角と文字を表示するコンポーネントを追加する。
  • [200] ReadImageComponentクラスを継承してPaintImageComponentクラスを定義する。
  • [201] paintメソッドを定義する。
  • [202] bufferedImageからGraphics2D クラスのオブジェクトgraphics2Dを作る。
  • [203]-[206] 四角を表示する。
  • [207] 「RED ROSE」を四角の中に表する。
  • [208] 画像を表示する。

画像をファイルに書き込むサンプルプログラム

このサンプルは、四角で囲んだ「RED ROSE」の文字を画像に書き込んだ後「Save」ボタンが押されると画像を保存する。実際には「Save」ボタンが押されるとReadImageUserInterfaceクラスのactionPerformedメソッドが呼び出され、このメソッドの中から、さらにWriteImageComponentクラスのwriteImageメソッドが呼び出される流れになっている。

このプログラムは、二つのクラスから構成されている。ReadImageUserInterfaceクラスはSwingを使ったユーザ・インタフェースである。この部分は、前のセクションとほぼ同じであるが、ReadImageUserInterfaceクラスの中で、componentオブジェクトを作るところをPaintImageComponentクラスからWriteImageComponentクラスに書き換える。

もうひとつは、画像を書き込むWriteImageComponentクラスである。このクラスは、PaintImageComponentクラスを継承していている。

このため画像を保存するwriteImageメソッド以外の処理はPaintImageComponentクラスと同じである。ただし、writeImageメソッドは空のメソッドがオーバーライドされて画像を保存できるように書き換えられている。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしていこう。

  • [7]-[9] 画像を保存するコンポーネントを追加する。
  • [20] actionPerformedメソッドを定義する。
  • [21] 「Save」ボタンが押された時に、画像を保存するwriteメソッドを呼び出す。
  • [300] PaintImageComponentクラスを継承してWriteImageComponentクラスを定義する。
  • [301] writeImageメソッドを定義する。
  • [302] 文字列クラスの参照変数を宣言し、初期値としてファイル名を代入する。
  • [303]-[306] 指定されたファイルに指定されたフォーマットで画像を書き込む。

まとめ

このページではJavaで画像を扱う方法について簡単にご紹介した。

今回、紹介したサンプルプログラムで勉強していただきたい。

Javaの画像の取扱いについて参考にしていただければと思う。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*

ゼロからエンジニアを目指す方へ
短期間でエンジニアになる方法

必要な勉強や技術の最新動向、本当に使えるIT資格、学習に役立つ国からの奨励金などの情報を無料でお届け

資料を見てみる