我想在上传前调整图片(Pillow)的大小,我在下面编写代码,但是不起作用! 并得到错误:
`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:
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`
views.py
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) )
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)