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に