[python] PILでリサイズしたファイルデータを保存せずにS3にアップロードする
APPサーバーにアップロードしたファイルデータを保存せずに、メモリ上でリサイズ、そのままS3にアップロードしたい時のメモ。
デプロイサーバーにherokuを使ってるので、ファイル保存ができずに結構はまった
デプロイサーバーにherokuを使ってるので、ファイル保存ができずに結構はまった
from boto.s3 import connection,key import PIL.Image from io import BytesIO ACCESS_ID = '******' SECRET_KEY = '*****' BUCKET_NAME = '******' conn = connection.S3Connection(ACCESS_ID, SECRET_KEY) bucket = conn.get_bucket(BUCKET_NAME) k = key.Key(bucket, 'hoge/test.png') img = PIL.Image("test.jpg") img.thumbnail((400,600), Image.ANTIALIAS) out = BytesIO() img.save(out, "PNG") k.set_contents_from_string(out.getvalue(), headers={"Content-Type":"image/png"})
上記の例では、"test.jpg"という画像ファイルをS3のバケットの"hoge/test.png"にアップロードしている。
画像のリサイズだけでなくJPEGからPNGの変換も行っているが、これは別に必須ではないのであしからず。
画像のリサイズだけでなくJPEGからPNGの変換も行っているが、これは別に必須ではないのであしからず。