在我的django项目中,我有一个inmemoryuploaded文件,然后我用Pillow打开它,旋转它,并将它保存回自身。然而,最后一步实际上并不起作用。当我将其保存到文件时,保存正确(旋转)的图像。如何保存回文件对象而不是实际文件?
image = request.FILES['file']
img = Image.open(image)
img = img.rotate(90)
img.save("sample.jpeg", "jpeg") #this is correct
img.save(image, "jpeg") #this does not change the actual in memory image
答案 0 :(得分:4)
您必须重置保存上传文件的基础StreamIO对象的流位置。否则Image.save()将仅附加到流的末尾。
在尝试再次从内存中读取文件之前,您可能还需要重置流位置。
image = request.FILES['file']
img = Image.open(image)
img = img.rotate(90)
image.seek(0)
img.save(image, "jpeg")
image.seek(0)
image.read()
请注意,UploadedFile(InMemoryUploadedFile的基类)会跟踪文件大小,如果要更改基础文件对象,则根据InMemoryUploadedFile.size的代码可能会混淆。