我正在尝试将调整大小的图像上载到S3:
fp = urllib.urlopen('http:/example.com/test.png')
img = cStringIO.StringIO(fp.read())
im = Image.open(img)
im2 = im.resize((500, 100), Image.NEAREST)
AK = 'xx' # Access Key ID
SK = 'xx' # Secret Access Key
conn = S3Connection(AK,SK)
b = conn.get_bucket('example')
k = Key(b)
k.key = 'example.png'
k.set_contents_from_filename(im2)
但我有个错误:
in set_contents_from_filename
fp = open(filename, 'rb')
TypeError: coercing to Unicode: need string or buffer, instance found
我的猜测是
Key.set_contents_from_filename
需要一个字符串参数,但您传入的是im2
,这是Image.resize
返回的其他对象类型。我认为您需要将已调整大小的图像作为名称文件写入文件系统,然后将该文件名传递给k.set_contents_from_filename
。否则,在Key
类中找到另一个方法,该方法可以从内存构造(StringIO或某个对象实例)中获取图像内容。您需要将输出图像转换为一组字节,然后才能上载到s3。您可以将图像写入文件,然后上载文件,也可以使用cStringIO对象避免写入磁盘,正如我在这里所做的:
相关问题 更多 >
编程相关推荐