Python: удалить информацию Exif из изображений
чтобы уменьшить размер изображений, которые будут использоваться на веб-сайте, я уменьшил качество до 80-85%. Это уменьшает размер изображения совсем немного, до некоторой степени.
чтобы уменьшить размер без ущерба для качества, мой друг отметил, что необработанные изображения с камер имеют много метаданных, называемых Exif info. Поскольку нет необходимости сохранять эту информацию Exif для изображений на веб-сайте, мы можем удалить ее. Это еще больше уменьшит размер на 3-10 КБ.
но Я не могу найти подходящую библиотеку для этого в моем коде Python. Я просмотрел вопросы и опробовал некоторые из методов:
исходное изображение:http://mdb.ibcdn.com/8snmhp4sjd75vdr27gbadolc003i.jpg
-
/usr/local/bin/mogrify -strip filename
результат:http://s23.postimg.org/aeaw5x7ez/8snmhp4sjd75vdr27gbadolc003i_mogrify.jpg Этот метод уменьшает размер с 105 КБ до 99,6 КБ, но также изменилось качество цвета.
-
exiftool -all= filename
результат:http://s22.postimg.org/aiq99o775/8snmhp4sjd75vdr27gbadolc003i_exiftool.jpg Этот метод уменьшает размер от 105 КБ до 72,7 КБ, но также изменяет качество цвета.
- ответ подробно объясняет, как манипулировать информацией 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)