Ответ 1
Вам нужно преобразовать ваше выходное изображение в набор байтов, прежде чем вы сможете загрузить его на s3. Вы можете либо записать изображение в файл, либо загрузить файл, либо использовать объект cStringIO, чтобы избежать записи на диск, как я сделал здесь:
import boto
import cStringIO
import urllib
import Image
#Retrieve our source image from a URL
fp = urllib.urlopen('http://example.com/test.png')
#Load the URL data into an image
img = cStringIO.StringIO(fp.read())
im = Image.open(img)
#Resize the image
im2 = im.resize((500, 100), Image.NEAREST)
#NOTE, we're saving the image into a cStringIO object to avoid writing to disk
out_im2 = cStringIO.StringIO()
#You MUST specify the file type because there is no file name to discern it from
im2.save(out_im2, 'PNG')
#Now we connect to our s3 bucket and upload from memory
#credentials stored in environment AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
conn = boto.connect_s3()
#Connect to bucket and create key
b = conn.get_bucket('example')
k = b.new_key('example.png')
#Note we're setting contents from the in-memory string provided by cStringIO
k.set_contents_from_string(out_im2.getvalue())