使用PIL(Pillow)将来自TIF的EXIF数据(使用exifread读取)写入JPEG文件

时间:2014-11-19 13:53:40

标签: python-2.7 python-imaging-library exif

我正在编写一个功能,可以执行一些专门的图像处理,并以JPEG格式保存图像。当然,应尽可能保留元数据。我正在使用PIL(Pillow)并成功将JPEG文件用作输入数据,因为在这种情况下PIL能够读取EXIF数据。

但是,对于TIF图像,信息字典不包含'exif'键。使用模块exifread,读取exif数据工作正常,如此

import exifread
f = open('tifimage.tif')
img_exif = exifread.process_file(f)
f.close()

现在我想在保存时将这些exif-data传递给PIL,例如

img.save(filename, "JPEG", exif = img_exif)

但我无法找到如何正确格式化exif数据,因为它们来自exifread的dict类型,但需要采用原始字符串格式或PIL的只读缓冲区。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我们正在寻找的可能是Pyxif:https://pypi.python.org/pypi/Pyxif

图书馆正在这样做。

您可以从以下网址获取当前的Exif信息:

im = Image.open(file_path)
exif_data = im.info['exif']

然后你可以使用pyxif在字典​​中转换它:

zeroth_ifd, exif_ifd, gps_ifd = pyxif.load(file_path)

zeroth_ifd, exif_ifd, gps_ifd = pyxif.load(exif_data)

然后您可以修改exif字典,并在保存图像时使用:

zeroth_ifd[pyxif.ZerothIFD.Artist] = args.artist
zeroth_ifd[pyxif.ZerothIFD.Copyright] = args.copyright

exif_ifd[pyxif.ExifIFD.PixelXDimension] = size[0]
exif_ifd[pyxif.ExifIFD.PixelYDimension] = size[1]

exif_bytes = pyxif.dump(zeroth_ifd, exif_ifd, gps_ifd)

im.save(output_path, "JPEG", quality=85, exif=exif_bytes)