Django使用枕头将tiff转换为jpeg

时间:2018-12-15 08:54:47

标签: python django python-imaging-library tiff libtiff

我正在使用python 3中的Django,并且我有一个带有ImageField的模型,并且我试图覆盖.save()进行tiff到jpeg的转换:

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

class MyModel(models.Model):

    image = models.ImageField(upload_to=upload_image_to, editable=True, null=True, blank=True)


    def save(self, *args, **kwargs):
        pil_image_obj = Image.open(self.image)
        new_image_io = BytesIO()
        rgb_pil_image_obj = pil_image_obj.convert("RGB")
        rgb_pil_image_obj.save(new_image_io, quality=90, 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().save(*args, **kwargs)

但是,这导致:

tempfile.tif: Cannot read TIFF header.
*** OSError: -2

如果我尝试进行保存实验,但仅从磁盘打开TIFF文件而不是将Django PIL.Image馈入InMemoryUploadedFile,那么一切工作都很好,并且tiff转换为jpeg。

pil_image_obj.verify()也不会引发任何异常。

我正在使用Pillow==5.3.0

可能是什么问题?还有其他方法可以进行这种转换吗?

1 个答案:

答案 0 :(得分:0)

您需要将图像文件的路径传递到it('Should give the right boolean based on the input to the external call.', async () => { const testingExService = await ExService.new() // the object to test }); 。目前,您正在传递字段本身。

Image.open()