Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: Remove Exif info from images

In order to reduce the size of images to be used in a website, I reduced the quality to 80-85%. This decreases the image size quite a bit, up to an extent.

To reduce the size further without compromising the quality, my friend pointed out that raw images from cameras have a lot of metadata called Exif info. Since there is no need to retain this Exif info for images in a website, we can remove it. This will further reduce the size by 3-10 kB.

But I'm not able to find an appropriate library to do this in my Python code. I have browsed through related questions and tried out some of the methods:

Original image: http://mdb.ibcdn.com/8snmhp4sjd75vdr27gbadolc003i.jpg

  1. Mogrify

    /usr/local/bin/mogrify -strip filename
    

    Result: http://s23.postimg.org/aeaw5x7ez/8snmhp4sjd75vdr27gbadolc003i_mogrify.jpg This method reduces the size from 105 kB to 99.6 kB, but also changed the color quality.

  2. Exif-tool

    exiftool -all= filename
    

    Result: http://s22.postimg.org/aiq99o775/8snmhp4sjd75vdr27gbadolc003i_exiftool.jpg This method reduces the size from 105 kB to 72.7 kB, but also changed the color quality.

  3. This answer explains in detail how to manipulate the Exif info, but how do I use it to remove the info?

Can anyone please help me remove all the extra metadata without changing the colours, dimensions, and other properties of an image?

like image 272
Sudipta Avatar asked Nov 05 '13 10:11

Sudipta


2 Answers

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')
like image 142
user2141737 Avatar answered Sep 16 '22 18:09

user2141737


For me, gexiv2 works fine:

#!/usr/bin/python3

from gi.repository import GExiv2

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

See also Exif manipulation library for python, which you linked, but didn't read all answers ;)

like image 38
Christoph Avatar answered Sep 20 '22 18:09

Christoph