2

在保存到服务器之前,我试图在继续对其进行一些其他处理之前去除上传图像上的exif数据。

我在这个答案中使用 piexif 来去除exif 元数据。但是,piexif.insert() 文档需要修改图像的路径。可以使用 piexif 写入内存中的文件吗?

还记录了 PIL 以去除 exif 数据。因为无论如何我都在使用 PIL,所以我宁愿使用纯 PIL 方法。

def modifyAndSaveImage():
    # Get the uploaded image as an InMemoryUploadedFile
    i = form.cleaned_data['image']

    # Use piexif to remove exif in-memory?
    #exif_bytes = piexif.dump({})
    #piexif.insert(exif_bytes, i._name)  # What should the second parameter be?

    # continue using i...
    im = Image.open(i)
    buffer = BytesIO()
    im.save(fp=buffer, format='JPEG', quality=95)

    return ContentFile(buffer.getvalue())

PIL 的保存方法似乎是将 exif 数据应用于图像,而不是在没有 exif 的情况下保存它(对原始图像应用旋转)。还是这是由 BytesIO 缓冲区引起的?

4

1 回答 1

0

如果您加载文件PIL并保存它,它将删除 EXIF;

from PIL import Image

image = Image.open(form.cleaned_data['image'])

image.save('my_images/image.jpg')

如果您对仍然存在的任何数据有疑问,您也可以尝试像这样创建一个全新的图像;

from PIL import Image

image = Image.open(form.cleaned_data['image'])

image_data = list(image.getdata())

new_image = Image.new(image.mode, image.size)
new_image.putdata(image_data)
new_image.save('my_images/image.jpg')

文档Image这里

于 2020-09-10T21:55:19.857 回答