【发布时间】:2012-06-09 03:15:00
【问题描述】:
我正在使用 PIL 使用此方法调整上传文件的大小:
def resize_uploaded_image(buf):
imagefile = StringIO.StringIO(buf.read())
imageImage = Image.open(imagefile)
(width, height) = imageImage.size
(width, height) = scale_dimensions(width, height, longest_side=240)
resizedImage = imageImage.resize((width, height))
return resizedImage
然后我使用此方法在我的主视图方法中获取 resizedImage:
image = request.FILES['avatar']
resizedImage = resize_uploaded_image(image)
content = django.core.files.File(resizedImage)
acc = Account.objects.get(account=request.user)
acc.avatar.save(image.name, content)
但是,这给了我“读取”错误。
追踪:
异常类型:/myapp/editAvatar 处的 AttributeError 异常值: 阅读
知道如何解决这个问题吗?我已经玩了好几个小时了! 谢谢!
尼库尼
【问题讨论】:
-
PIL Image 对象不是文件。您需要首先使用某种编码(例如 PNG)将
save()指向 StringIO 对象。将文件写入 StringIO 后不要忘记seek(0)!旁注:为什么不直接从buf读取并避免额外的包装器StringIO? -
卡梅伦,感谢您的回复。我对此真的很陌生。而且我真的不明白发生了什么。我试图拼凑 sn-ps 以使其工作。如何保存到 StringIO 对象。最顶层方法中的 resizedImage.save().seek(0) 是否足够好?如果您可以向我展示一些示例代码或记录此内容的地方,那就太好了:) 谢谢。
-
因为您似乎关心调整头像的大小,这是非常常见和标准的事情:而不是直接使用像 easy_thumbnails 这样的专用应用程序(也使用 PIL)使用 PIL 调整图像大小可能会有所作为对你来说更容易:easy-thumbnails.readthedocs.org/en/latest/usage/#python
标签: python django file-upload resize python-imaging-library