Django: resize image before upload
我想在上传前调整图片(枕头)的大小,我写下面的代码但不工作!得到错误:
AttributeError at /myapp/list/
_committed
Request Method: POST
Request URL: http://127.0.0.1:8000/myapp/list/
Django Version: 1.8 Exception Type: AttributeError Exception Value:_committed
Exception Location:
/usr/local/lib/python3.4/dist-packages/Pillow-2.8.1-py3.4-linux-x86_64.egg/PIL/Image.py
in getattr, line 622 Python Executable: /usr/bin/python3.4 Python
Version: 3.4.0
VIEW
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | def list(request): # Handle file upload if request.method == 'POST': form = DocumentForm(request.POST, request.FILES) if form.is_valid(): imga = request.FILES['docfile'] size = (600, 400) im = Image.open(imga) imga = im.resize(size) request.FILES['docfile'] = imga newdoc = Document(docfile = request.FILES['docfile'], namefile=request.POST['namefile']) newdoc.save() # Redirect to the document list after POST return HttpResponseRedirect(reverse('myproject.myapp.views.list')) else: form = DocumentForm() # A empty, unbound form # Load documents for the list page documents = Document.objects.all() # Render list page with the documents and the form return render_to_response( 'myapp/list.html', {'documents': documents, 'form': form}, context_instance=RequestContext(request) ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from PIL import Image from io import BytesIO from django.core.files.base import ContentFile from resizeimage import resizeimage class SomeModel(models.Model): image = models.ImageField(upload_to=your_get_file_path_callback) def save(self, *args, **kwargs): pil_image_obj = Image.open(self.image) new_image = resizeimage.resize_width(pil_image_obj, 100) new_image_io = BytesIO() new_image.save(new_image_io, format='JPEG') temp_name = self.image.name self.image.delete(save=False) self.image.save( temp_name, content=ContentFile(new_image_io.getvalue()), save=False ) super(SomeModel, self).save(*args, **kwargs) |
另外,我使用了"python image resize"来调整大小https://github.com/charlesthk/python-resize-image
有一些有用的答案,但您可能希望了解当前代码的情况。
由于此行,您的代码引发了异常:
1 | request.FILES['docfile'] = imga |
那是怎么回事?您正在将枕头
对于图像大小调整,您可以使用djanof简单缩略图库。
下面是我在项目中使用的示例代码
1 2 | options = {'size': (200, 200), 'crop': True} thumb_url =get_thumbnailer(image path).get_thumbnail(options).url |
参考https://github.com/smileychris/easy-thumbnails