はじめに
Googleのインフラで実行されるクラウドサービス「Google App Engine」が2009年4月7日にJavaに対応しました。Javaエンジニアにも利用できるようになった、Google App Engineを一緒に勉強して行きましょう!
今回は簡単に画像処理ができる、Images Java APIを紹介したいと思います。
対象読者
- ウェブサービス開発に興味のあるJavaエンジニア
- Google App Engine for Javaに興味がある方
必要な環境
- 「Google Plugin for Eclipse」がインストールされている、Eclipse 3.3(Europa)か3.4(Ganymede)
開発環境の構築手順については、第1回の解説を参照してください。
プロジェクトの作成
前回と同じように、ボタンメニューから[g]ボタンをクリックして新規プロジェクトを作成します。
今回はGWTを利用しないので、[Use Google Web Toolkit]のチェックは外してください。Project nameは「ImageTest」、Packageは「com.daisukeyamashita.test.images」にしました。
Images Java APIとは?
Google App Engineでは画像データを加工するAPIが提供されています。具体的には以下のような機能を備えています。
- リサイズ
- 回転
- 切り出し
- 色調変更
対応している入力画像フォーマットは以下の通りで、出力画像フォーマットは「JPEG」「PNG」のみです。
- JPEG
- PNG
- GIF(アニメーションGIFを含む)
- BMP
- TIFF
- ICO
なお入出力サイズは、ともに1MBに制限されているのでご注意下さい。
Images Java APIを使ってみよう!
Google App Engineの「Images Java API」は、規模が小さく簡単に使える画像処理APIです。
画像の加工は、加工処理を実行するサービス(ImageService)に、加工対象データ(Image)と加工処理(Transform)を与え実行するだけ、とシンプルです。1回の処理で1加工しかできませんので、「切り取ってから回転したい」という時は、「切り取り」と「回転」を続けて実行します。
まずは、画像データを50x50のサイズに変更する実際のソースコードを見てみましょう。
ImagesService imagesService = ImagesServiceFactory.getImagesService(); // (1) Image oldImage = ImagesServiceFactory.makeImage(oldImageData); //(2) Transform resize = ImagesServiceFactory.makeResize(50, 50); //(3) Image newImage = imagesService.applyTransform(resize, oldImage); //(4)
- ImageServiceインスタンスを取得します。
- 入力ストリームからImageインスタンスを生成します。
- 加工処理が定義されているTransformインスタンスを生成します。
- ImageServiceインスタンスで、Imageインスタンス(加工対象データ)にTransformインスタンス(加工処理)を実行します。
これだけのコードで、画像データを50x50のサイズに画像を加工することができます。
makeResizeは元画像のアスペクト比率をそのままに、引数に指定した矩形サイズに収まるように画像を加工します。つまり、200x200の画像をmakeResize(200, 50)
で加工すると、50x50の画像が生成されます。現在のImages Java APIでは、アスペクト比を変更する手段が用意されていませんので、アスペクト比を変更するには、別のライブラリを利用して下さい。