当前位置:  开发笔记 > 编程语言 > 正文

在Python中调整图像大小而不会丢失EXIF数据

如何解决《在Python中调整图像大小而不会丢失EXIF数据》经验,为你挑选了3个好方法。

我需要使用Python调整jpg图像的大小,而不会丢失原始图像的EXIF数据(关于日期的元数据,相机模型等).关于python和图像的所有谷歌搜索指向我正在使用的PIL库,但似乎无法保留元数据.我到目前为止的代码(使用PIL)是这样的:

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')

有任何想法吗?或者我可以使用的其他图书馆?



1> jfs..:
import jpeg
jpeg.setExif(jpeg.getExif('foo.jpg'), 'foo-resized.jpg') 

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


jpeg库(如果你能找到它)看起来只是win32.
但是,这将保存错误信息,尤其是关于X和Y分辨率.
@Jake:您可以按照@iny http://stackoverflow.com/questions/400788/resize-image-in-python-without-losing-exif-data的建议尝试http://tilloy.net/dev/pyexiv2//403293#403293 旧内容的链接(jpeg模块):http://web.archive.org/web/20080425064422/http://www.emilas.com/jpeg/ http://code.google.com/p/pipp/downloads /detail?name=jpeg-0.1.5.win32.zip

2> Maksym Kozle..:

您可以使用pyexiv2从源图像复制EXIF数据.在以下示例中,使用PIL库调整图像大小,使用pyexiv2复制的EXIF数据和使用新大小设置的图像大小EXIF字段.

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 file
resize_image("41965749.jpg", "resized.jpg", (600,400))



3> Depado..:

实际上有一种非常简单的方法,只需PIL即可将EXIF数据从图片复制到另一张图片.虽然它不允许修改exif标签.

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)

如您所见,save函数可以使用exif参数,该参数允许在保存时复制新图像中的原始exif数据.如果你想做的话,你实际上并不需要任何其他的lib.我似乎无法找到有关保存选项的任何文档,我甚至不知道这是否特定于Pillow或使用PIL.(如果有人有某种联系,我会很高兴,如果他们在评论中发布了它)

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有