Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django上调整图像大小后如何将其保存到数据库?_Python_Django_Django Models - Fatal编程技术网

Python 在Django上调整图像大小后如何将其保存到数据库?

Python 在Django上调整图像大小后如何将其保存到数据库?,python,django,django-models,Python,Django,Django Models,我试图在上传图像时调整文件大小,但在尝试将其保存到模型的ImageField时遇到一些问题 这是我的型号。py: try: from PIL import Image, ImageOps except ImportError: import Image import ImageOps class IMGResize(models.Model): image = models.ImageField(upload_to='images', blank=True)

我试图在上传图像时调整文件大小,但在尝试将其保存到模型的ImageField时遇到一些问题

这是我的型号。py

try:
    from PIL import Image, ImageOps
except ImportError:
    import Image
    import ImageOps

class IMGResize(models.Model):
    image = models.ImageField(upload_to='images', blank=True)

    def save(self, *args, **kwargs):
        if self.image:
            img = Image.open(self.image) #<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=980x490 at 0x59E4B38>

            imageresize = img.resize((200, 200), Image.ANTIALIAS) #<PIL.Image.Image image mode=RGB size=200x200 at 0x4D5F630>
            imageresize.save('newname.jpg', 'JPEG', quality=75) #not being saved here to my models
        super(IMGResize, self).save(*args, **kwargs)
试试看:
从PIL导入图像,图像操作
除恐怖外:
导入图像
导入图像操作
类IMGResize(models.Model):
image=models.ImageField(上传到='images',blank=True)
def保存(自身、*args、**kwargs):
如果自我形象:
img=Image.open(self.Image)#
imageresize=img.resize((200200),Image.ANTIALIAS)#
imageresize.save('newname.jpg','JPEG',quality=75)#此处未保存到我的模型
超级(IMGResize,self).save(*args,**kwargs)

如何解决此问题,以便将调整大小的图像保存到我的模型中?

我相信这可以解决问题(针对PIL图像对象编辑:

from django.core.files.base import ContentFile
import StringIO

....

class IMGResize(models.Model):
    image = models.ImageField(upload_to='images', blank=True)

    def safe(self, *args, **kwargs):
        if self.image:
            img = Image.open(self.image)
            imageresize = img.resize((200, 200), Image.ANTIALIAS)

            image_formatted = Image.open(StringIO(imageresize.content))
            image_io = StringIO()

            image_formatted.save(image_io, format='JPEG')


            self.image.save(self.image.name, ContentFile(image_io.getvalue(), True)

            super(IMGResize, self).save(*args, **kwargs)

我相信这会成功(针对PIL图像对象编辑:

from django.core.files.base import ContentFile
import StringIO

....

class IMGResize(models.Model):
    image = models.ImageField(upload_to='images', blank=True)

    def safe(self, *args, **kwargs):
        if self.image:
            img = Image.open(self.image)
            imageresize = img.resize((200, 200), Image.ANTIALIAS)

            image_formatted = Image.open(StringIO(imageresize.content))
            image_io = StringIO()

            image_formatted.save(image_io, format='JPEG')


            self.image.save(self.image.name, ContentFile(image_io.getvalue(), True)

            super(IMGResize, self).save(*args, **kwargs)

我在madzohana那里找到了这个问题的答案,没有任何问题

from PIL import Image
from io import BytesIO
from django.core.files.base import ContentFile

def save(self, *args, **kwargs):
    img = Image.open(self.image)
    resized  = img.resize((200, 200), Image.ANTIALIAS)
    new_image_io = BytesIO()

    if img.format == 'JPEG' :
        resized .save(new_image_io, format='JPEG')
    elif img.format == 'PNG' :
        resized.save(new_image_io, format='PNG')

    temp_name = self.image.name
    self.image.delete(save=False)

    self.image.save(
        temp_name,
        content=ContentFile(new_image_io.getvalue()),
        save=False
    )

    super(IMGResize, self).save(*args, **kwargs)

我在madzohana那里找到了这个问题的答案,没有任何问题

from PIL import Image
from io import BytesIO
from django.core.files.base import ContentFile

def save(self, *args, **kwargs):
    img = Image.open(self.image)
    resized  = img.resize((200, 200), Image.ANTIALIAS)
    new_image_io = BytesIO()

    if img.format == 'JPEG' :
        resized .save(new_image_io, format='JPEG')
    elif img.format == 'PNG' :
        resized.save(new_image_io, format='PNG')

    temp_name = self.image.name
    self.image.delete(save=False)

    self.image.save(
        temp_name,
        content=ContentFile(new_image_io.getvalue()),
        save=False
    )

    super(IMGResize, self).save(*args, **kwargs)

它给了我一个错误:“Image”对象没有属性“read”啊是的,你正在使用PIL图像,等一下,让我找到PIL图像的正确方法我对PIL的答案感兴趣,但对于这个,什么“Image”它使用的是什么库?我试过StringIO一次,但它似乎与python 3兼容,问题是我不知道如何调整io以使用img resize应用程序。我认为这应该是正确的,但可能以更短的方式实现。我以前的示例是使用sorl.thumbnail进行ResizeGit,这给了我以下错误:“Image”对象没有属性“read”啊,是的,您使用的是PIL图像,等一下,让我找到PIL图像的正确方式我对PIL的答案感兴趣,但也对这个问题感兴趣,什么“Image”它使用的是什么库?我试过StringIO一次,但它似乎与python 3兼容,问题是我不知道如何使io适应img resize应用程序。我认为这应该是正确的,但可能用更短的方式。我以前的示例是使用sorl.thumbnail来调整这项工作的大小,但它总是这样每次我更新表单但不插入新图像时都运行调整大小功能。这可以工作,但每次我更新表单但不插入新图像时都会运行调整大小功能。