SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Groovy+GrailsでRailsなWeb開発

GroovyとGoogle App Engineでアプリ開発(番外編)
~GAEで利用できるさまざまなサービス

Groovy+GrailsでRailsなWeb開発 第8回


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

イメージ処理について

 ここでは、イメージファイルを読み込んでbyte配列として取り出すメソッド、byte配列からImageを作成するメソッド、そしてImageを縮小処理するメソッドというように、処理ごとにメソッドを整理しています。GAE/Jに用意されているイメージ処理機能を使っているのは、TransformImageメソッドの部分です。ここでは、次のような形でイメージを縮小しています。

 イメージの縮小は、com.google.appengine.api.imagesパッケージに用意されているクラスを利用します。ここでは、まずImagesServiceFactoryクラスの「makeResize」というクラスメソッドを呼び出しています。これは引数に横幅と縦幅を示すint値を渡して実行します。

イメージのサイズを指定し、「Transform」クラスのインスタンスを取得
Transform resize = ImagesServiceFactory.makeResize(w, h)

 これで得られるのは、イメージそのものではなく、「Transform」というクラスのインスタンスです。これは、いわば「イメージの変換情報のクラス」といってよいでしょう。イメージの操作は、変換情報をTransformとして用意し、これをイメージに適用して行います。

 Transformが用意できたら、次に行うのはイメージの操作を行う「ImagesService」インスタンスの取得です。これはImagesServiceFactoryクラスの「getImagesService」クラスメソッドで取得します。

「ImagesService」インスタンスの取得
ImagesService service = ImagesServiceFactory.getImagesService()

 取得したImagesServiceの「applyTransform」を使い、イメージにTransformによる変換を適用します。引数にTransformImageインスタンスを渡して呼び出すと、第1引数の変換処理を第2引数のImageに対して行い、その結果(変換済みのImage)を返します。後は、このイメージをクライアントに返送すればいいわけです。

イメージをクライアントに返送
return service.applyTransform(resize, img)

 この他、引っかかりやすい点として「イメージファイルの読み込み」についても触れておきましょう。通常、イメージファイルの読み込みと言うと、ImageIOクラスや、FileInputStreamなどを使うと考えるでしょう。GAE/Jでも、FileInputStreamはサポートされていますが、これを利用してイメージファイルを読み込もうとしてもうまくいきません。リソースファイルの読み込みは、ServletContextの「getResource」や「getResourceAsStream」を利用して読み込みを行うようにしてください。

 ImagesServiceFactoryに用意されているイメージ変換関係のメソッドは、ここで使ったmakeResize以外にもいろいろとあります。回転や上下左右の反転、切り抜き、イメージの合成などが高速に処理できます。基本的な流れが分かったら、transformImageメソッドを修正してさまざまなイメージ変換処理を試してみるとよいでしょう。

まとめ

 今回は、GAE/Jで利用可能なサービスとして、認証、Gmail送信、イメージ処理といったものについてまとめて紹介しました。基本的な利用の仕方は、Javaによるものとそれほど違いはありません。ですから、Java向けのドキュメントなどを読み、そのままGroovyに利用すれば、大抵の機能は使えるようになるはずです。Groovyには、Javaにはない機能もあります。それはGroovyのスクリプトによるサーブレットであったり、Groovletであったり、GSPであったりしますが、こうしたものを利用することで、Javaよりも楽にコーディングができるようになるでしょう。

 ただし、実際にGroovyを使ってプログラムを作成していくと、稀にですが「原因不明のエラー」に遭遇することもないわけではありません。今回も、イメージの出力で非常に長い時間、頭を悩ませました。もし、同じように「あっているはずなのに、なぜか動かない」というような現象に遭遇したら、まず「Javaで動くかどうか」を確認してみてください。それにより、それがGroovy特有の問題か、それともGAE/J自体の問題かを切り分けることができます。Groovy固有の問題であれば、その部分だけJavaを利用することで回避すればよいのですから。JavaとGroovyを上手に使い分ける。それがGroovyを快適に使うためのコツといってよいでしょう。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Groovy+GrailsでRailsなWeb開発連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4400 2009/10/09 20:27

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング