Ответ 1
Вы можете попробовать загрузить изображение с помощью Python Image Lirbary (PIL), а затем снова сохранить его в другом файле. Это должно удалить метаданные.
Чтобы уменьшить размер изображений для использования на веб-сайте, я снизил качество до 80-85%. Это немного уменьшает размер изображения, вплоть до некоторой степени.
Чтобы еще больше уменьшить размер без ущерба для качества, мой друг отметил, что необработанные изображения с камер содержат много метаданных, называемых информацией Exif. Поскольку нет необходимости сохранять эту информацию 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 кБ, но также изменяет качество цвета.
Может ли кто-нибудь помочь мне удалить все лишние метаданные, не меняя цвета, размеры и другие свойства изображения?
Вы можете попробовать загрузить изображение с помощью Python Image Lirbary (PIL), а затем снова сохранить его в другом файле. Это должно удалить метаданные.
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')
Для меня 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)