【问题标题】:Django Python PIL save image - broken imageDjango Python PIL保存图像-损坏的图像
【发布时间】:2014-12-27 13:54:06
【问题描述】:

我正在覆盖 modelAdmin 的 save_model 方法,将通过管理页面上传的图像调整为 650:

def save_model(self, request, obj, form, change):
    basewidth = 650
    img = PIL.Image.open(form.cleaned_data['image_file'])

    if img.size[0] > basewidth:
        wpercent = (basewidth / float(img.size[0]))
        hsize = int((float(img.size[1]) * float(wpercent)))
        img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS)

        img_filefield = getattr(obj, 'image_file')
        random_image_name = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(30)) + '.jpeg'
        img.save(random_image_name)
        img_filefield.save(random_image_name, ContentFile(img))
        obj.save()
    else:
        obj.save()

它正在保存图像,但图像已损坏,如果我打开它,它只是带有"invalid image" 的黑色图像。

我在上面的代码中做错了什么?

【问题讨论】:

    标签: python django image python-imaging-library


    【解决方案1】:

    我不知道 PIL 图像的类型与 Django ImageField 类型不同。感谢Skitz的answer,我可以这样解决:

    def save_model(self, request, obj, form, change):
        basewidth = 650
        img = PIL.Image.open(form.cleaned_data['image_file'])
    
        if img.size[0] > basewidth:
            wpercent = (basewidth / float(img.size[0]))
            hsize = int((float(img.size[1]) * float(wpercent)))
            img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS)
    
            img_file_lang = getattr(obj, 'image_file')
            random_image_name = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(30)) + '.jpeg'
    
            image_io = StringIO.StringIO()
            img.save(image_io, format='JPEG')
    
            img_file_lang.save(random_image_name, ContentFile(image_io.getvalue()))
            obj.save()
        else:
            obj.save()
    

    别忘了做:import StringIO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-11
      • 2023-03-19
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多