Preserve exif data of image with PIL when resize(create thumbnail)

后端 未结 3 1644
迷失自我
迷失自我 2020-11-30 11:15

When I try to resize (thumbnail) an image using PIL, the exif data is lost.

What do I have to do preserve exif data in the thumbnail image? When I searched for the s

相关标签:
3条回答
  • 2020-11-30 11:38
    import pyexiv2
    from PIL import  Image
    
    file_path = '/home/../img/a.JPG'
    metadata = pyexiv2.ImageMetadata(file_path)
    metadata.read()
    thumb = metadata.exif_thumbnail
    thumb.set_from_file(file_path)
    thumb.write_to_file('512_' + "a")
    thumb.erase()
    metadata.write()
    

    Now I open the image using (Patch Image Inspector) , I can see the exif data

    0 讨论(0)
  • 2020-11-30 11:40

    In my project, i met the same issue with you. After searching Google, I found piexif library. It help to Pilow save exif data to thumbnails.

    You can use the source code below:

    from PIL import  Image
    import piexif
    import StringIO
    
    
    file_path = '/home/me/img/a.JPG'
    im = Image.open( file_path)
    
    # load exif data
    exif_dict = piexif.load(im.info["exif"])
    exif_bytes = piexif.dump(exif_dict)
    
    THUMB_SIZES = [(512, 512)]
    for thumbnail_size in THUMB_SIZES:
        im.thumbnail( thumbnail_size, Image.ANTIALIAS)
        thumbnail_buf_string = StringIO.StringIO()
        # save thumbnail with exif data
        im.save('512_' + "a", "JPEG", exif=exif_bytes)
    

    Note: I am using python 3.4 and ubuntu 14.04

    0 讨论(0)
  • 2020-11-30 11:55

    I read throught some of the source code and found a way to make sure that the exif data is saved with the thumbnail.

    When you open a jpg file in PIL, the Image object has an info attribute which is a dictionary. One of the keys is called exif and it has a value which is a byte string - the raw exif data from the image. You can pass this byte string to the save method and it should write the exif data to the new jpg file:

    from PIL import Image
    
    size = (512, 512)
    
    im = Image.open('P4072956.jpg')
    im.thumbnail(size, Image.ANTIALIAS)
    exif = im.info['exif']
    im.save('P4072956_thumb.jpg', exif=exif)
    

    To get a human-readable version of the exif data you can do the following:

    from PIL import Image
    from PIL.ExifTags import TAGS
    
    im = Image.open('P4072956.jpg')
    for k, v in im._getexif().items():
        print TAGS.get(k, k), v
    
    0 讨论(0)
提交回复
热议问题