我正在编写一个功能,可以执行一些专门的图像处理,并以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的只读缓冲区。
非常感谢任何帮助!
答案 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)