Django: resizing an image before uploading

I want to resize the image ( Pillow ) before downloading, I write the code below, but it does not work! and get the error:

AttributeError in / 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

Exclusion 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) ) 
+2
python django python-imaging-library pillow
May 25 '15 at 8:45
source share
3 answers
 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) 

PS for resizing I used 'python-image-resize' https://github.com/charlesthk/python-resize-image

+21
May 25 '15 at 9:32
source share

You can use the free djanof thumbnail to resize the image.

Below is an example of the code that I used in my project

 options = {'size': (200, 200), 'crop': True} thumb_url =get_thumbnailer(image path).get_thumbnail(options).url 

For reference https://github.com/SmileyChris/easy-thumbnails

0
May 25 '15 at 9:19
source share

There were some helpful answers, but you can understand what is happening with your current code.

Your code raises this exception because of this line:

 request.FILES['docfile'] = imga 

What is wrong with this? You work on the Image pillow object on the django ImageField element. These are two different types, and when you call the Document constructor, it can expect to find a file form field that contains the _committed attribute.

0
May 25 '15 at 9:38
source share



All Articles