Python: удалить информацию Exif из изображений

чтобы уменьшить размер изображений, которые будут использоваться на веб-сайте, я уменьшил качество до 80-85%. Это уменьшает размер изображения совсем немного, до некоторой степени.

чтобы уменьшить размер без ущерба для качества, мой друг отметил, что необработанные изображения с камер имеют много метаданных, называемых Exif info. Поскольку нет необходимости сохранять эту информацию Exif для изображений на веб-сайте, мы можем удалить ее. Это еще больше уменьшит размер на 3-10 КБ.

но Я не могу найти подходящую библиотеку для этого в моем коде Python. Я просмотрел вопросы и опробовал некоторые из методов:

исходное изображение:http://mdb.ibcdn.com/8snmhp4sjd75vdr27gbadolc003i.jpg

  1. однако существует

    /usr/local/bin/mogrify -strip filename
    

    результат:http://s23.postimg.org/aeaw5x7ez/8snmhp4sjd75vdr27gbadolc003i_mogrify.jpg Этот метод уменьшает размер с 105 КБ до 99,6 КБ, но также изменилось качество цвета.

  2. Exif-tool

    exiftool -all= filename
    

    результат:http://s22.postimg.org/aiq99o775/8snmhp4sjd75vdr27gbadolc003i_exiftool.jpg Этот метод уменьшает размер от 105 КБ до 72,7 КБ, но также изменяет качество цвета.

  3. ответ подробно объясняет, как манипулировать информацией Exif, но как использовать ее для удаления информации?

может кто-нибудь, пожалуйста, помогите мне удалить все дополнительные метаданные без изменения цветов, размеров и других свойств изображения?

4 ответов


вы можете попробовать загрузить изображение с помощью Python Image Lirbary (PIL) и затем сохранить его снова в другой файл. Это должно удалить метаданные.


from PIL import Image

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

# 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')

для меня gexiv2 работает:

#!/usr/bin/python3

from gi.repository import GExiv2

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

см. также библиотека манипуляций Exif для python, который вы связали, но не прочитали все ответы;)


вам даже не нужно делать дополнительные шаги @user2141737 предложил. Просто открывая его с помощью PIL и сохраняя его снова, кажется, делает трюк просто отлично:

from PIL import Image
image = Image.open('path/to/image')
image.save('new/path/' + file_name)