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

Django图像大小调整并在上传前进行转换

百里君博
2023-03-14
问题内容

我在这个主题上进行了很多搜索,但找不到真正需要的东西。我会解释我的问题:

在我的网站上,用户可以上传图像。我需要调整此图片的大小并将其转换为JPEG, 然后再 上传。

我在Views.py中看到了使用方法的一些解决方案,但我想通过重写Models.py中的save()方法来实现。问题是,我发现所有用于在save方法中调整图像大小的解决方案都是在第一次保存(称为超级功能)后才执行的,这意味着它不使用带宽(如果我使用CDN)(我是正确的)点?)。

感谢您的帮助


问题答案:

首先,最好建立正确的语言。Django和Python仅存在于服务器端。因此,他们操纵,保存或以其他方式使用的所有内容都必须先发送到服务器。如果要使用Django或Python管理照片,则用户必须首先将此照片上传到服务器。照片上传后,Django可以在存储文件之前自由进行更改。

如果您关注上传带宽,并且不想上传大文件,则必须在客户端上调整照片的大小并重新格式化。如果这是一个Web应用程序,则可以使用Javascript来完成,但是不能使用Python来完成,因为Python无法在像您这样的应用程序的客户端上运行。

如果您不关心带宽,那么您可以自由地让用户“上传”文件,但是在保存之前让Django调整大小并重新格式化。

您是正确的,您将要覆盖照片对象的保存功能。我建议使用库来处理大小调整和重新格式化,例如sorl。

from sorl.thumbnail import ImageField, get_thumbnail

class MyPhoto(models.Model):
    image = ImageField()

    def save(self, *args, **kwargs):
        if self.image:
            self.image = get_thumbnail(self.image, '500x600', quality=99, format='JPEG')
        super(MyPhoto, self).save(*args, **kwargs)

Sorl只是我有信心并熟悉的一个库,但是需要一些调整和配置。您可以检出Pillow或其他东西,而只需替换line
overing即可self.image

我在这里也发现了类似的问题。

编辑:上面
看到了您的评论回复的更新。另请注意,如果您的网络服务器正在处理Django,并且您的文件已保存到某些CDN,则此方法将起作用。在将图像上载到CDN 之前
,将在网络服务器上对其进行调整大小(假设您的配置符合我的假设)。

希望这可以帮助!



 类似资料:
  • 问题内容: 我想在上传前调整图片(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: A

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

  • 以下是我现在使用HTML5文件API上传多个图像的代码片段: 我想在使用canvas对象上传之前调整图像大小,但没有这方面的经验,我不确定如何使用技术更新代码,例如这里描述的技术:HTML5在上传之前预调整图像大小 将返回一个编码字符串。但是我需要发布对象。 您将如何(合理地)为大多数现代浏览器编写跨浏览器功能,以便在上传之前调整文件大小,以透明方式处理jpg、png和GIF:

  • 问题内容: 我在这里使用Go调整大小包:https://github.com/nfnt/resize 我正在从S3中提取图像,如下所示: // this gives me data []byte 之后,我需要调整图像大小: // problem is that the original_image has to be of type image.Image 将图像上传到我的S3存储桶 // pro

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

  • 问题内容: 我正在尝试将调整大小的图像上传到S3: 但我得到一个错误: 问题答案: 您需要先将输出图像转换为一组字节,然后才能上载到s3。您可以将图像写入文件然后上传文件,也可以使用cStringIO对象来避免写入磁盘,就像我在这里所做的那样: