When it’s ready.

出来るまで出来ない

GAEでImageAPI 使ってみる

GoogleI/O 初日の夜にBOF会場でid:Webooさんと作りかけたのをアップしました。

ImageAPIの機能サンプルです。
回転、リサイズ、Lucky、クロップが出来るようになっています。
パラメータは埋め込んだので、細かい調整は出来ません。また
アップしたイメージは消せるので、間違ってあげても消せます。
認証は特につけてないので誰でもあげたり見たりすることが出来ます。

http://a2c.appspot.com/iu

イメージを処理する部分は以下の通り

class Guestbook(webapp.RequestHandler):
  def post(self):
    greeting = Greeting()
    if users.get_current_user():
      greeting.author = users.get_current_user()
    greeting.content = self.request.get("content")

    param = self.request.get("param")
    if(param == "resize"):
      avatar = images.resize(self.request.get("img"), 32, 32)
    if(param == "lucky"):
      avatar = images.im_feeling_lucky(self.request.get("img"))
    if(param == "rotate"):
      avatar = images.rotate(self.request.get("img"), 90)
    if(param == "crop"):
      avatar = images.crop(self.request.get("img"), 0.1,0.1,0.2,0.2)
    
    else:
      avatar = images.resize(self.request.get("img"), 64, 64)
    greeting.avatar = db.Blob(avatar)
    greeting.put()
    self.redirect('/iu')

ラジオボタンで選択した名前に応じてifして行くのって普通なのかな?なんか違う気がするけど、動いているのでよしとする。本当はパラメータを持って来れるようにしたかったけど、テスト用なので今回はパス。

ローカルでテストするとLuckyが動かなかった。

モデルは、サンプルに有るのをそのまま使った。

class Greeting(db.Model):
  author = db.UserProperty()
  content = db.StringProperty(multiline=True)
  avatar = db.BlobProperty()
  date = db.DateTimeProperty(auto_now_add=True)

デリートするメソッドURLはgetで実装してクエリーでkeyを渡す事にした。以下、デリートメソッド

class DelImage(webapp.RequestHandler):
  def get(self, keyID):
    greeting = Greeting.get(keyID)
    db.delete(greeting)
    self.redirect('/iu')

これで、一気に面白い事が出来るという訳じゃないけどアイコンとかが超簡単に作れるようになった。