Django:上传前调整图片大小

jav*_*d75 3 python django python-imaging-library

我想在上传之前调整图片大小(Pillow),我写下面的代码却不行! 并得到错误:

/ myapp/list /的AttributeError

_committed

请求方法:POST

请求URL:http://127.0.0.1:8000 / myapp/ list / Django版本:1.8异常类型:AttributeError异常值:

_committed

例外地点:

/usr/local/lib/python3.4/dist-packages/Pillow-2.8.1-py3.4-linux-x86_64.egg/PIL/Image.py

getattr中,第622行Python可执行文件:/usr/bin/python3.4 Python版本: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)
)
Run Code Online (Sandbox Code Playgroud)

mad*_*han 22

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)
Run Code Online (Sandbox Code Playgroud)

用于调整大小的PS我使用了'python-image-resize'https://github.com/charlesthk/python-resize-image


小智 0

对于调整图像大小,您可以使用 djanof easy缩略图库。

以下是我在项目中使用的示例代码

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

供参考https://github.com/SmileyChris/easy-thumbnails