当前位置: 首页 > 面试题库 >

Django:上传前调整图片大小

从焱
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 我发现了一些不同的帖子,甚至关于stackoverflow的问题都回答了这个问题。我基本上正在实现与此职位相同的事情。 所以这是我的问题。上传照片时,我还需要提交表单的其余部分。这是我的html: 以前,我不需要调整图像大小,因此我的JavaScript看起来像这样: 所有这些都很好用…现在我需要调整图像的大小…如何替换表单中的图像,以便发布调整大小的图像而不是上传的图像? 我曾考虑过

  • 问题内容: 我已经为这个问题苦苦挣扎了几个小时。我想从输入标签调整图像大小,然后将其上传到服务器。这是我的尝试。 我的输入元素: 我的功能: } 我正在为我的项目使用ReactJS。我被上面的评论所困扰,无法获得图片的宽度。在上传之前,我曾在HTML5预先调整大小的图片上尝试过此解决方案,但这似乎对我不起作用。谁能指出我的代码有什么问题以及如何解决?谢谢一群! 问题答案: 问题是,你没有访问其前等

  • 问题内容: 我在这个主题上进行了很多搜索,但找不到真正需要的东西。我会解释我的问题: 在我的网站上,用户可以上传图像。我需要调整此图片的大小并将其转换为JPEG, 然后再 上传。 我在Views.py中看到了使用方法的一些解决方案,但我想通过重写Models.py中的save()方法来实现。问题是,我发现所有用于在save方法中调整图像大小的解决方案都是在第一次保存(称为超级功能)后才执行的,这意

  • 问题内容: 我尝试使用不带Django表单的Ajax上传图像。 它不返回错误。没关系,它保存在数据库“ name”和“ description”中,但不保存“ image” :( 我的代码: views.py models.py html javascript 问题答案: 这里的问题是Ajax代码,您不能直接通过变量发送图像。 为此,您必须创建FormData,然后将文件添加到其中,可以在此处找到

  • 问题内容: 这是面条擦。 请记住,我们有HTML5本地存储和xhr v2,而没有。 我想知道是否有人可以找到一个可行的例子,甚至只是对这个问题给我一个是或否: 是否可以使用新的本地存储(或其他方式)对图像进行预调整大小,以便对重新调整图像大小不了解的用户可以将其10mb图像拖到我的网站中,然后使用新的本地存储来调整其大小并然后以较小的尺寸上传。 我非常了解您可以使用Flash,Java apple

  • 问题内容: 我是Django(和Python)的新手,在尝试使用其他人的应用程序之前,我一直在尝试自己做一些事情。我在理解事物在Django(或Python)的执行方式中“适合”何处时遇到了麻烦。我要解决的问题是上传图片后如何调整图片大小。我已经很好地设置了模型并插入了admin,并且图像可以很好地上传到目录: 我现在遇到的麻烦是获取该文件并将新文件制作为缩略图。就像我说的那样,我想知道如何在不使