我使用PIL使用這種方法來調整上載文件的Django:調整大小上傳的文件中使用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)
但是,這給了我'讀'錯誤。
跟蹤:
異常類型:AttributeError的在/ MyApp的/ editAvatar異常值: 讀
任何想法如何解決這一問題?我已經呆了好幾個小時了! 謝謝!
Nikunj
PIL圖像對象不是文件。您需要先使用某種編碼(例如PNG)將'save()'保存到一個StringIO對象。在將文件寫入到StringIO之後,不要忘記「尋找(0)」!附註:爲什麼不直接從'buf'讀取並避免額外的包裝StringIO? – Cameron
卡梅隆,謝謝你的回覆。我對此很新。我不明白髮生了什麼事。我正在拼湊片段以使其工作。如何保存到一個StringIO對象。將resizedImage.save()。seek(0)放在最上面的方法是否足夠好?如果你可以給我看一些示例代碼或者這裏有記錄的地方,那會很棒:)謝謝。 – nknj
由於您似乎關心調整化身的大小,這是非常常見和標準的事情:與直接使用像easy_thumbnails(也使用PIL的專用應用程序)一起使用PIL調整圖像大小可能會使事情變得更加簡單:http:/ /easy-thumbnails.readthedocs.org/en/latest/usage/#python – arie