Django:上传前调整图片大小

我想在上传前调整图片(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:

_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`

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)

以上是 Django:上传前调整图片大小 的全部内容, 来源链接: utcz.com/qa/426633.html

回到顶部