Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resize image in Python without losing EXIF data

I need to resize jpg images with Python without losing the original image's EXIF data (metadata about date taken, camera model etc.). All google searches about python and images point to the PIL library which I'm currently using, but doesn't seem to be able to retain the metadata. The code I have so far (using PIL) is this:

img = Image.open('foo.jpg') width,height = 800,600 if img.size[0] < img.size[1]:     width,height = height,width  resized_img = img.resize((width, height), Image.ANTIALIAS) # best down-sizing filter resized_img.save('foo-resized.jpg') 

Any ideas? Or other libraries that I could be using?

like image 588
Einar Egilsson Avatar asked Dec 30 '08 16:12

Einar Egilsson


People also ask

How do I resize an image without losing the details?

If you want to resize an image without losing quality, you need to make sure that the "Resample" checkbox is unchecked. This checkbox tells Paint to change the number of pixels in the image. When you uncheck this box, Paint will not change the number of pixels, and the quality of the image will not be reduced.

Can you resize an image in Python?

To resize an image, you call the resize() method on it, passing in a two-integer tuple argument representing the width and height of the resized image. The function doesn't modify the used image; it instead returns another Image with the new dimensions.


2 Answers

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 here image = 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)

like image 58
Depado Avatar answered Sep 30 '22 06:09

Depado


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

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

like image 42
jfs Avatar answered Sep 30 '22 06:09

jfs