Resize image in Python without losing EXIF data Resize image in Python without losing EXIF data python python

Resize image in Python without losing EXIF data


There is actually a really simple way of copying EXIF data from a picture to another with only PIL. Though it doesn't permit to modify the exif tags.

image = Image.open('test.jpg')exif = image.info['exif']# Your picture process hereimage = image.rotate(90)image.save('test_rotated.jpg', 'JPEG', exif=exif)

As you can see, the save function can take the exif argument which permits to copy the raw exif data in the new image when saving. You don't actually need any other lib if that's all you want to do. I can't seem to find any documentation on the save options and I don't even know if that's specific to Pillow or working with PIL too. (If someone has some kind of link, I would enjoy if they posted it in the comments)


import jpegjpeg.setExif(jpeg.getExif('foo.jpg'), 'foo-resized.jpg') 

http://www.emilas.com/jpeg/


You can use pyexiv2 to copy EXIF data from source image. In the following example image is resized using PIL library, EXIF data copied with pyexiv2 and image size EXIF fields are set with new size.

def resize_image(source_path, dest_path, size):    # resize image    image = Image.open(source_path)    image.thumbnail(size, Image.ANTIALIAS)    image.save(dest_path, "JPEG")    # copy EXIF data    source_image = pyexiv2.Image(source_path)    source_image.readMetadata()    dest_image = pyexiv2.Image(dest_path)    dest_image.readMetadata()    source_image.copyMetadataTo(dest_image)    # set EXIF image size info to resized size    dest_image["Exif.Photo.PixelXDimension"] = image.size[0]    dest_image["Exif.Photo.PixelYDimension"] = image.size[1]    dest_image.writeMetadata()# resizing local fileresize_image("41965749.jpg", "resized.jpg", (600,400))