GAE/Pで画像をリサイズして定形のサイズにはめ込む

2011-09-26
このエントリーをはてなブックマークに追加

日本語としてややわかりにくいタイトルなのですが、つまり縦長の画像だろうが横長の画像だろうが、正方形にフレームに押し込んでしまいましょうということです。

縦横を統一のサイズにしておくことで、画像のタイリング、というか一覧表示が楽になります。これはHTML+CSSでもできそうな気がしたのですが、元画像をいじくってしまいました。

from google.appengine.api import images

_image = self.cleaned_data[‘upload_image’]
_temp = images.resize(_image.read(), 200, 200)
image_list = [(_temp, 0,0,1.0, images.CENTER_CENTER,),]

image = images.composite(image_list, 200, 200, 0)
_names = _image.name.split(‘.’)

_up = Image()
_up.image = image
_up.ext = _names[1].lower()
_up.put()

以上です。簡単ですね。

元画像はフォームからアップロードされた前提です。Djangoのフォーム使ってますので、webappとか使ってる人は読み替えていただければ。

上記の例では、resizeは縦横の長いほうが200pxになるようにリサイズしてくれます。縦横比は変わりません。これを200×200の土台の真ん中に貼りつけてやるという流れです。

それが、「images.composite()」になります。

 

Tags: ,

GAE Pythonでログ出力する方法

2011-08-25
このエントリーをはてなブックマークに追加

Python+Djangoで開発しているときはprintで出力できるからいいのですが、GAEだとPrintするとブラウザ上に表示されてしまって困ります。

あ、ハセテツはDjangoで開発するときはコンソールでrunserverしているので、printがコンソール上に表示されるんです。

import logging

logging.getLogger().setLevel(logging.DEBUG)
logging.debug(‘ログメッセージ’)

これだけですね。これでGoogleAppEngineLauncherから起動したLog Consoleに表示されます。

「logging.getLogger().setLevel(logging.DEBUG)」はなくても大丈夫です。その場合、「debug」じゃなくて「info」で出力されます。

まぁ、debugにしておけば本番運用時には出力されないってことでしょうね。

Tags: ,

GAE(Python)でYahoo!知恵袋APIを叩いてXMLをパースする

2011-08-17
このエントリーをはてなブックマークに追加

PHPでYahoo!知恵袋APIを叩く方法は先日書いたので、今度はPythonで。しかもGAEを使ってみようかと。

# -*- coding: utf-8 -*-

from django.http import *
from django.shortcuts import render_to_response
from google.appengine.api import urlfetch
from xml.dom import minidom
import logging
import urllib

def index(request):

_url = “http://chiebukuro.yahooapis.jp/Chiebukuro/V1/questionSearch?appid=「自分で取得するアプリID」&query=”+ urllib.quote(‘焼肉’)
_result = urlfetch.fetch(_url)
_dom = minidom.parseString(_result.content)
_list = _dom.getElementsByTagName(“Question”)

for item in _list:

logging.info(u”ID:%srn” % item.getElementsByTagName(‘Id’)[0].firstChild.data)
logging.info(u”質問:%srn” % item.getElementsByTagName(‘Content’)[0].firstChild.data)
logging.info(u”回答:%srn” % item.getElementsByTagName(‘BestAnswer’)[0].firstChild.data)

return render_to_response(‘index.html’)

まぁ、これだけなんです。あ、Django使ってます。が、その部分は関係ないですね。XMLのパースはもうちっとスマートにならないかなあ。これはモジュールを知らないだけかなぁ。

ちなみに、BestAnswerがないと、というか、ノードに値がないとエラーが出ます。ので、実際に使う場合はその判定が必要になりますね。

 

Tags: ,