【问题标题】:how maintain exif data of images resizes using PIL如何维护使用 PIL 调整大小的图像的 exif 数据
【发布时间】:2013-06-08 07:30:40
【问题描述】:

当我尝试使用 PIL 调整图像大小(缩略图)时,它会破坏与图像关联的 exif 数据, 如何保存。

我调整图像大小并将其作为图像缓冲区上传到云端。

file_path = '...'
file_name = '...'
im = Image.open( file_path )
size =(512,521)
im.thumbnail( size, Image.ANTIALIAS)
thumbnail_buf_string = StringIO.StringIO()
file_save_extension = 'JPEG'
im.save(thumbnail_buf_string, format=file_save_extension)
upload_to_cloud('512_' + file_name , thumbnail_buf_string.getvalue())

调整大小的图像没有 exif 数据。

【问题讨论】:

    标签: python python-imaging-library pyexiv2


    【解决方案1】:

    注意:我自己还没有这样做,但据我所知,PIL 只允许读取 exif 标签,但不能写入它们。您可能需要 gexiv2 或 pyexiv2 将标签写入缩略图。

    更新:我很好奇并自己尝试了:D 如果我说得对,您只想复制元数据而不进行进一步修改。

    这仍然很粗糙,但似乎有效:

    import os
    import Image
    import pyexiv2
    
    fp = '/home/klaus/workspace'
    fn = 'img_2380.jpg'
    
    full_path = os.path.join(fp, fn)
    print full_path
    
    im = Image.open(full_path)
    size = 512, 512
    im.thumbnail(size, Image.ANTIALIAS)
    im.save('bla.jpg', 'JPEG')
    
    oldmeta = pyexiv2.ImageMetadata(full_path)
    oldmeta.read()
    # read metadata of the original file
    
    newmeta = pyexiv2.ImageMetadata('bla.jpg')
    newmeta.read()
    # read metadata of the new file
    # yes, there aren't any, but this is crucial!
    # you need this class as the target for copying!
    
    oldmeta.copy(newmeta)
    
    newmeta.write()
    # don't forget to write the data to the new file
    

    顺便说一句:感谢您提出有趣的问题!

    【讨论】:

    • 听起来不错,我试过 pyexiv2 stackoverflow.com/a/17059383/658976,但我需要使用图像缓冲区。
    • 我安装了 gexiv2,并且可以编辑 exif 数据,但是如何在内存中编辑字符串图像的编辑 exif。例如:im.save(thumbnail_buf_string, format=file_save_extension)
    • 你说得对,有没有办法将原始图像的exif数据设置为调整后的大小而不将第二个保存在光盘中? , 表示将 exif 设置为调整大小图像本身的图像实例。如果不可能,我认为按照您的建议做的唯一方法,谢谢
    • 你是对的,在内存中做这一切会很好。不幸的是,我还没有发现这是否可能或如何实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2012-12-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2016-10-04
    相关资源
    最近更新 更多