我正在尝试使用Pillow和Python 3将EXIF数据写入jpg文件。我不明白为什么以下代码失败。任何帮助将不胜感激。
fileName
是jpg文件的有效完整路径和文件名。我从QListWidget访问该名称,该名称将照片文件名称及其图像显示为图标。总体思路是遍历QListWidget中的文件列表并更新每个文件的EXIF数据。
while S < self.lstPhotos.count():
fileName = str(self.lblPath.text() + "/" + self.lstPhotos.item(S).text())
im = Image.open(fileName)
exifdata = im._getexif()
exifdata[0x010f] = "Canon"
exifdata[0x0110] = "EOS 630"
im.save(fileName, exif=exifdata)
S += 1
我收到的错误是:
Traceback (most recent call last):
File "/home/richard/Dropbox/Documents/Personal/Python/PhotOrg/src/photoOrgMain.py", line 372, in WriteEXIFData
im.save(fileName, exif=exifdata)
File "/home/richard/.local/lib/python2.7/site-packages/PIL/Image.py", line 1698, in save
save_handler(self, fp, filename)
File "/home/richard/.local/lib/python2.7/site-packages/PIL/JpegImagePlugin.py", line 725, in _save
ImageFile._save(im, fp, [("jpeg", (0, 0)+im.size, 0, rawmode)], bufsize)
File "/home/richard/.local/lib/python2.7/site-packages/PIL/ImageFile.py", line 490, in _save
e = Image._getencoder(im.mode, e, a, im.encoderconfig)
File "/home/richard/.local/lib/python2.7/site-packages/PIL/Image.py", line 439, in _getencoder
return encoder(mode, *args + extra)
TypeError: argument 13 must be string or read-only buffer, not dict
我猜测Pillow不想要字典形式的EXIF数据,但这是Pillow从文件中检索的格式。
我无法在线查找有关EXIF数据应采用何种格式的文档。我认为它应与Pillow使用_getexif()
调用生成的格式相同。
我正在使用Python 3.我使用的是最新版本的Pillow。 Pillow安装在.local / lib / python2.7 / site-packages / PIL /上,其他功能似乎在Python 3下工作。