16

为了减少要在网站中使用的图像的大小,我将质量降低到 80-85%。这在一定程度上减小了图像大小。

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

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

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

  1. 莫格里化

    /usr/local/bin/mogrify -strip filename
    

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

  2. Exif 工具

    exiftool -all= filename
    

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

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

谁能帮我删除所有额外的元数据而不改变图像的颜色、尺寸和其他属性?

4

4 回答 4

38
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')
于 2014-04-23T16:14:09.427 回答
12

对我来说,gexiv2工作正常:

#!/usr/bin/python3

from gi.repository import GExiv2

exif = GExiv2.Metadata('8snmhp4sjd75vdr27gbadolc003i.jpg')
exif.clear_exif()
exif.clear_xmp()
exif.save_file()

另请参阅您链接的 Python 的 Exif 操作库,但未阅读所有答案;)

于 2013-11-05T10:51:38.540 回答
8

您可以尝试使用Python 图像库 (PIL)加载图像,然后将其再次保存到不同的文件中。那应该删除元数据。

于 2013-11-05T10:22:09.130 回答
8

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

from PIL import Image
image = Image.open('path/to/image')
image.save('new/path/' + file_name)
于 2018-07-06T15:46:36.967 回答