我正在使用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
可能是什么问题?还有其他方法可以进行这种转换吗?
答案 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()