conta's diary

思ったこと、やったことを書いてます。 twitter: @conta_

FlaskとPILImageを使ってリサイズした画像をResponseする

Webの画像をサムネイルにして表示したい!
ファイルシステムからの画像の読み書きは情報いっぱいあるんだけど、
メモリ上にキャッシュして処理したかったのでやってみた。

やりたいこと

  • 画像をリサイズしてサムネイルをつくりたい
  • Webから撮ってきた画像をファイルに書き出すことなくレスポンスを作りたい(メモリ上にキャッシュしたい)
  • Flaskでレスポンスを返したい

方法

1. StringIOを使って画像のバイナリを受け取る

url = 'http://www.google.co.jp/intl/ja_jp/images/logo.gif'
buffer = urllib2.urlopen(url).read()
img = Image.open(StringIO(buffer))

2. 画像をリサイズしてStringIOに渡す

size = (120, 75)
img.thumbnail(size)
buf = StringIO()
img.save(buf, 'png')

3. レスポンスを作る

response = helpers.make_response(buf.getvalue())
response.headers["Content-type"] = "Image"
return response

コードはGithubに
contaconta/FlaskPILImageThumbnailExample · GitHub

*参考
Python Imaging Library Handbook