我正在编写一个函数来执行一些专门的图像处理并将图像保存为 JPEG 格式。自然,元数据应尽可能保留。我正在使用 PIL(枕头)并成功地使用 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 的只读缓冲区。
任何帮助表示高度赞赏!
最佳答案
我们正在寻找的可能是 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)
关于python-2.7 - 使用 PIL(枕头)将 EXIF 数据从 TIF(使用 exifread 读取)写入 JPEG 文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27018588/