下面的代碼需要它被保存後的圖像,使縮略圖出來的:Django的 - 手動保存圖像到的ImageField場
class Image(models.Model):
image = models.ImageField(upload_to='images')
thumbnail = models.ImageField(upload_to='images/thumbnails', editable=False)
def save(self, *args, **kwargs):
super(Image, self).save(*args, **kwargs)
if self.image:
from PIL import Image as ImageObj
from cStringIO import StringIO
from django.core.files.uploadedfile import SimpleUploadedFile
try:
# thumbnail
THUMBNAIL_SIZE = (160, 160) # dimensions
image = ImageObj.open(self.image)
# Convert to RGB if necessary
if image.mode not in ('L', 'RGB'): image = image.convert('RGB')
# create a thumbnail + use antialiasing for a smoother thumbnail
image.thumbnail(THUMBNAIL_SIZE, ImageObj.ANTIALIAS)
# fetch image into memory
temp_handle = StringIO()
image.save(temp_handle, 'png')
temp_handle.seek(0)
# save it
file_name, file_ext = os.path.splitext(self.image.name.rpartition('/')[-1])
suf = SimpleUploadedFile(file_name + file_ext, temp_handle.read(), content_type='image/png')
self.thumbnail.save(file_name + '.png', suf, save=False)
except ImportError:
pass
它的正常工作,原始圖像+縮略圖都被上傳,圖像被分配正確的路徑。
唯一的問題是縮略圖沒有被分配新創建的縮略圖的路徑 - 它在數據庫中是空的。我已閱讀文檔,它看起來像如果我保存保存縮略圖=真應該解決我的問題:
self.thumbnail.save(file_name + '.png', suf, save=True)
但是,這樣做是提高以下幾點:
Django Version: 1.3.1
Exception Type: IOError
Exception Value:
cannot identify image file
我可以弄清楚我做錯了什麼。
我已經試過了,它給出了以下錯誤: 異常類型:\t AttributeError 異常值:'str'對象沒有屬性'chunks' – abstractpaper