首页 文章

如何在django中保存裁剪图像到图像场

提问于
浏览
1

我正在尝试将裁剪的图像保存到模型中 . 我收到以下错误:

Traceback(最近一次调用最后一次):文件“/mypath/lib/python2.7/site-packages/django/core/handlers/base.py”,第132行,在get_response response = wrapped_callback(request,* callback_args,* * callback_kwargs)文件“/mypath/lib/python2.7/site-packages/django/contrib/auth/decorators.py”,第22行,在_wrapped_view中返回view_func(request,* args,** kwargs)文件“/ mypath /views.py“,第236行,在player_edit player.save()文件”/mypath/lib/python2.7/site-packages/django/db/models/base.py“,第734行,保存force_update = force_update ,update_fields = update_fields)文件“/mypath/lib/python2.7/site-packages/django/db/models/base.py”,第762行,在save_base updated = self._save_table(raw,cls,force_insert,force_update, using,update_fields)文件“/mypath/lib/python2.7/site-packages/django/db/models/base.py”,第824行,在_save_table中为f表示non_pks]文件“/mathath/lib/python2.7 /site-packages/django/db/models/fields/files.py“,第313行,在pre_save中,如果是file而不是file._committed:文件”/ mypath / l ib / python2.7 / site-packages / PIL / Image.py“,第512行,getattr引发AttributeError(name)AttributeError:_committed

我处理表单提交的视图如下所示:

if request.method == 'POST':
        form = PlayerForm(request.POST, request.FILES, instance=current_player)
        if form.is_valid():

            temp_image = form.cleaned_data['profile_image2']
            player = form.save()
            cropped_image = cropper(temp_image, crop_coords)
            player.profile_image = cropped_image
            player.save() 
            return redirect('player')

裁剪功能如下所示:

from PIL import Image
import Image as pil

    def cropper(original_image, crop_coords):

        original_image = Image.open(original_image)

        original_image.crop((0, 0, 165, 165))

        original_image.save("img5.jpg")

        return original_image

将裁剪后的图像保存到模型是否正确?如果是这样,为什么我会收到上述错误?

谢谢!

1 回答

  • 2

    该函数应如下所示:

    # The crop function looks like this:
    
    from PIL import Image
    
    from django.core.files.base import ContentFile
    
    def cropper(original_image, crop_coords):
          img_io = StringIO.StringIO()
          original_image = Image.open(original_image)
          original_image.crop((0, 0, 165, 165))
          original_image.save(img_io, format='JPEG', quality=100)
          img_content = ContentFile(img_io.getvalue(), 'img5.jpg')
          return img_content
    

相关问题