Python:从图像中删除Exif信息

Sud*_*pta 12 python exif image-processing python-imaging-library exiftool

为了减少网站中使用的图像尺寸,我将质量降低到80-85%.这在很大程度上减小了图像尺寸.

为了在不影响质量的情况下进一步缩小尺寸,我的朋友指出,来自相机的原始图像有很多称为Exif信息的元数据.由于无需为网站中的图像保留此Exif信息,我们可以将其删除.这将进一步减小3-10 kB的大小.

但我无法在我的Python代码中找到合适的库来执行此操作.我浏览了相关问题并尝试了一些方法:

原始图片:http://mdb.ibcdn.com/8snmhp4sjd75vdr27gbadolc003i.jpg

  1. Mogrify

    /usr/local/bin/mogrify -strip filename
    
    Run Code Online (Sandbox Code Playgroud)

    结果:http://s23.postimg.org/aeaw5x7ez/8snmhp4sjd75vdr27gbadolc003i_mogrify.jpg 此方法将大小从105 kB缩小到99.6 kB,但也改变了颜色质量.

  2. EXIF工具

    exiftool -all= filename
    
    Run Code Online (Sandbox Code Playgroud)

    结果:http://s22.postimg.org/aiq99o775/8snmhp4sjd75vdr27gbadolc003i_exiftool.jpg 此方法将大小从105 kB减小到72.7 kB,但也改变了颜色质量.

  3. 这个答案详细解释了如何操作Exif信息,但我如何使用它来删除信息?

任何人都可以帮我删除所有额外的元数据,而无需更改图像的颜色,尺寸和其他属性?

小智 27

from PIL import Image

image = Image.open('image_file.jpeg')

# next 3 lines strip exif
data = list(image.getdata())
image_without_exif = Image.new(image.mode, image.size)
image_without_exif.putdata(data)

image_without_exif.save('image_file_without_exif.jpeg')
Run Code Online (Sandbox Code Playgroud)


Chr*_*oph 10

对我来说,gexiv2工作正常:

#!/usr/bin/python3

from gi.repository import GExiv2

exif = GExiv2.Metadata('8snmhp4sjd75vdr27gbadolc003i.jpg')
exif.clear_exif()
exif.clear_xmp()
exif.save_file()
Run Code Online (Sandbox Code Playgroud)

另见python的Exif操作库,您链接了但未读取所有答案;)


Ahm*_*mad 8

您甚至不需要执行@user2141737 建议的额外步骤。只需用 PIL 打开它并再次保存它似乎就可以解决问题:

from PIL import Image
image = Image.open('path/to/image')
image.save('new/path/' + file_name)
Run Code Online (Sandbox Code Playgroud)

  • 是的,那是不正确的。请不要这样做! (2认同)

Ber*_*Ber 5

您可以尝试使用Python Image Lirbary(PIL)加载图像,然后将其再次保存到其他文件中.这应该删除元数据.

  • 如果元数据太大,则无法工作,https://github.com/python-pillow/Pillow/issues/2445。 (2认同)
  • 这个答案将通过 /sf/answers/3584969111/ 中的代码示例得到改进 (2认同)
  • 是的,那是不正确的。请不要这样做!– (2认同)