DATE : 2006/07/21 (Fri)
JAI で基本となるクラスは、次の2つです。
ParameterBlock
処理を行う際のパラメータを設定するためのクラスです。
例えば、画像の周辺部を切り落とす Crop 操作は以下のパラメータを指定できます。(詳しくは、javax.media.jai.operator.CropDescriptorをご覧ください)
パラメータ名 | 型 | 説明 |
---|---|---|
x | java.lang.Float | 切り取る領域の原点の x 座標値 |
y | java.lang.Float | 切り取る領域の原点の y 座標値 |
width | java.lang.Float | 切り取る領域の幅 |
height | java.lang.Float | 切り取る領域の高さ |
なお、原点とは、領域の左上隅の座標のことを言います。
ここで、100×100の画像(java.awt.image.BufferedImage)の外周10 px を切り落とすとすると、パラメータは次のようになります。
パラメータ名 | 値 |
---|---|
x | 10 |
y | 10 |
width | 80 px |
height | 80 px |
このパラメータを構築するコードは、次のようになります。
ここでのポイントは、以下の通りです。
- addSource メソッドで操作対象の画像を指定する。
- add メソッドでパラメータを順番に指定する。
- パラメータの型に気をつける。
ParameterBlock parameter = new ParameterBlock();
// 操作対象画像の設定
parameter.addSource(image);
// パラメータの設定
parameter.add((float) 10);
parameter.add((float) 10);
parameter.add((float) 80);
parameter.add((float) 80);
ここで、操作対象の画像を表すオブジェクトは image 変数に格納されているものとします。
なお、addSource メソッドで指定できる画像は、java.awt.image.RenderedImage か java.awt.image.renderble.RenerableImage のどちらかです。今回は RenderedImage の方を指定しました。両者の違いは、今回は省略します。
なお、パラメータの型が異なると、操作の実行時に例外が発生します。
ちなみに、JAI には javax.media.jai.ParameterBlockJAI というクラスがあります。こちらを使うと、パラメータ名を指定して値を設定できます。
JAI
上で設定したパラメータで Crop 操作を行うコードは次の通りです。
RenderedOp result;
result = JAI.create("Crop", parameter);
ここで、create メソッドの第1引数で指定している文字列は、実行したい操作の名前です。具体的には、実行したい操作の「GrobalName」を指定します。例えば、Crop 操作の場合は、javax.media.jai.operator.CropDescriptor に「GrobalName」が「Crop」と設定されています。ちなみに、大文字小文字の区別はありません。「crop」と操作を指定しても、動作します。
なお、操作の結果返ってくるオブジェクトは、RenderedImage インタフェースを実装しています。そのため、続けて他の操作を行う場合は、返ってきたオブジェクトを次の操作の対象としてそのまま使うことができます。
DATE : 2006/07/20 (Thu)
インストール
Java Advanded Imaging (JAI) のインストールには、3通りの方法があります。
ここでは、Windows でのインストールを前提に話を進めていきます。
JAI は、「Java Advanced Imaging Binary Builds」のページからダウンロードできます。
現在リリースされている最新バージョンは、1.1.2_01です。
ダウンロードできるパッケージには、以下の3通りがあります。
- JRE にインストールするパッケージ
- Java の実行環境に JAI をインストールするパッケージです。「*-jre.*」という形式のファイルです。JAI が必要なアプリケーションを実行する場合は、このパッケージをインストールします。
- JDK にインストールするパッケージ
- Java の開発環境に JAI をインストールするパッケージです。「*-jdk.*」という形式をしたファイルです。JDK 付属の JRE を使って JAI が必要なアプリケーションを起動する場合は、このパッケージをインストールします。
- 指定のフォルダにインストールするパッケージ
- インストールするフォルダを指定できるパッケージです。「*-windows-*.exe」という形式をしたファイルです。クラスパス変数は自分で設定しなければなりません。
私個人としては、実行用に JRE / JDK にインストールするパッケージを、Eclipse のビルドパスや Maven の依存ライブラリへの設定のために「指定のフォルダにインストールするパッケージ」を使用しています。
ファイルの構成
JAI は、以下のファイルから構成されています。(ドキュメント類は除きます)
- jai_core.jar
- JAI の核となるクラスライブラリです。JRE や JDK にインストールした場合は、<JRE のインストールフォルダ>\lib\ext にインストールされています。
- jai_codec.jar
- 主に、各種画像形式のエンコードやデコードを行うクラスライブラリが収められています。jai_core.jar と同じフォルダにインストールされています。
- mlibwrapper_jai.jar
- ネイティブライブラリを呼び出すためのライブラリです。jai_core.jar と同じフォルダにインストールされています。
- mlib_jai.dll
- C で記述されたネイティブライブラリです。JRE や JDK にインストールした場合は、<JRE のインストールフォルダ>\bin にインストールされています。
- mlib_jai_mmx.dll
- MMX を使用したネイティブライブラリです。mlib_jai.dll と同じフォルダにインストールされています。
- checkmmx.exe
- MMX が使用可能かどうかを確認するためのプログラムです。
DATE : 2006/07/18 (Tue)
最近、Java Advanced Imaging というライブラリを知りました。
簡単に言えば、高度な画像処理用のライブラリです。例えば、画像の拡大・縮小・回転はもちろんのこと、ノイズ除去フィルタなどのフィルタや色変換、DFT、ヒストグラムの作成など、画像処理の基本的な手法がある程度揃っています。
また、一部の処理は C で実装されており、MMXを使って実行される処理もあります。
JIT が賢くなったとはいえ、処理の重い画像処理をネイティブでやってくれるので、とても心強いですね( ´∀`)。
ただこのライブラリ、一応 Sun が作ったもので歴史も古い(バージョン1.0 は1999年のリリース)のですが、日本語の情報が極端に少ないんですよね……(´・ω・`)「"Java Advanced Imaging"」で Google 検索しても、1000件程度しかヒットしません。
ということで、Java Advanced Imaging の使い方をメモしていくことになるかもしれません。
DATE : 2006/07/17 (Mon)
文字列を入力ストリーム(java.io.InputStream)に流すには、次のようにします。
(import 文などは省略)
ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes());
なお、この場合、入力ストリームにはプラットフォームで標準の文字コードが流れます。例えば、日本語 Windows の場合は Shift_JIS(正確には、MS932)です。
なお、String に格納された XML を入力ストリームに流すには、XML の文書型宣言に指定された文字エンコーディングを指定するようにします。例えば、以下のように UTF-8 が文字エンコーディングに指定されていたとします。
<?xml version="1.0" encoding="UTF-8" ?>
この場合は、次のようにして XML を入力ストリームに流します。
(import 文などは省略)
ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes("UTF-8"));
文字エンコーディングの宣言がない場合は、XML の仕様に沿って、UTF-8 で入力ストリームに流します。
ちなみに、この方法はごく限られた場面でしか使いません。通常は、入力ストリームではなく文字ストリーム(java.io.StringReader)を使います。文字列の入力を受け付けるメソッドが入力ストリームしか受け付けない場合にのみ、この方法が使えます。
DATE : 2006/07/09 (Sun)
Maven プロジェクトを作る
プロジェクトを配置したいディレクトリ(例えば、Eclipse のワークスペースディレクトリなど)で以下のコマンドを実行します。
「<~>」の部分は、作成したいプロジェクトによって置き換えてください。
mvn archetype:create -DgroupId=<groupId> -DartifactId=<artifactId> -DarchetypeArtifactId=maven-archetype-webapp
コマンドを実行すると、Maven プロジェクトが作成されます。作成されるディレクトリは、 artifactId と同じ名前になります。
Eclipse のプロジェクトファイルの生成
作成したプロジェクト内で、以下のコマンドを実行します。すると、Eclipse のプロジェクトファイルが生成されます。
mvn eclipse:eclipse
なお、Eclipse に m2eclipse プラグインをインストールしておくと便利です。
依存するライブラリの設定
ここでは、単純なサーブレットを開発することを前提に話を進めます。
サーブレットを開発するには、サーブレット API が必要です。
そこで、pom.xml に以下の内容を追記します。
なお、「...」は省略部分を表します。
<project>
...
<dependencies>
...(他の依存ライブラリがある場合)
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependencies>
...
</project>
サーブレット API は、ビルド時には必要ですが、配置時には必要ない(サーブレットエンジンが API を持っている)ため、スコープを provided としています。
ディレクトリ構成
Maven を用いてウェブアプリケーションを開発する際のディレクトリ構成で主なものを以下に挙げます。
- src/main/java
- サーブレットなどのソースコードを格納するディレクトリです。
- src/test/java
- テストコードを格納するディレクトリです。
- src/main/resource
- リソースを格納するディレクトリです。ビルド時に、クラスファイルと同じディレクトリにコピーされます。
- src/main/webapp
- JSP ファイルや HTML ファイルなどのページを格納するディレクトリです。直下に WEB-INF ディレクトリがあります。
Maven2 Jetty Plugin を使う
これでウェブアプリケーションを開発できるようになりました。しかし、開発したウェブアプリケーションを試しに実行する環境がまだ整っていません。
Maven2 Jetty Plugin を使うと、ソースコードや JSP ファイルなどの変更を監視し、自動的にサーブレットエンジンに再配置してくれます。また、 Maven2 Jetty Plugin そのものがサーブレットエンジンなので起動が早く、試しに実行するには最適です。
Maven2 Jetty Plugin を使用するには、まずプラグインのインストールが必要です。そのために、Maven2 Jetty Plugin のある Maven リポジトリを pom.xml に記述します。
<project>
...
<pluginRepositories>
<pluginRepository>
<id>mortbay-repo</id>
<name>mortbay-repo</name>
<url>http://www.mortbay.org/maven2/snapshot</url>
</pluginRepository>
</pluginRepositories>
...
</project>
そして、Maven2 Jetty Plugin の設定を記述します。
<project>
...
<plugins>
...
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
</configuration>
</plugin>
...
</plugins>
...
</project>
「scanIntervalSeconds」は、ファイルの変更を監視する間隔を秒単位で表したものです。ここでは、10秒間隔で監視するように設定しています。
Maven2 Jetty Plugin を実際に使用するには、Maven プロジェクトのディレクトリ内で以下のコマンドを実行します。
mvn jetty:run
このコマンドを実行すると、Jetty サーバが立ち上がります。
なお、mvn に「-e」オプションを付けると、例外が発生した場合に、スタックトレースを表示させることができます。
標準では、「http://localhost:8080/<artifactId>」にアクセスすると、ウェブアプリケーションにアクセスできます。
Jetty サーバを終了するには、コマンドを実行したコンソールで「Ctrl+C」を押します。