Python:使用枕头将EXIF数据写入文件时出错
我正在尝试使用Pillow和Python3将EXIF数据写入jpg文件。我不明白为什么下面的代码失败了。任何帮助都将不胜感激Python:使用枕头将EXIF数据写入文件时出错,python,exif,pillow,Python,Exif,Pillow,我正在尝试使用Pillow和Python3将EXIF数据写入jpg文件。我不明白为什么下面的代码失败了。任何帮助都将不胜感激 fileName是jpg文件的有效完整路径和文件名。我正在从一个QListWidget访问该名称,它将照片文件名及其图像显示为图标。总体思路是迭代QListWidget中的文件列表,并更新每个文件的EXIF数据 while S < self.lstPhotos.count(): fileName = str(self.lblPath.text
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
我猜Pillow不需要字典形式的EXIF数据,但这是Pillow本身从文件中检索的格式
我无法在网上找到有关EXIF数据应采用何种格式的文档。我假设它的格式应该与使用\u getexif()
调用生成的格式相同
我正在使用Python3。我用的是最新版本的枕头。枕头安装在.local/lib/python2.7/site-packages/PIL/上,它的其他功能似乎在Python 3下工作
TypeError:参数13必须是字符串或只读缓冲区,而不是dict
-似乎您必须创建一个包含所有数据的字符串。如果您使用Python2.7
,为什么在模块文件夹中有PIL
表示它是内部函数,不应由用户使用-因此不要期望im.save
将使用与\u getexif()
返回相同的格式。感谢您的建议。有人知道save调用中EXIF数据的正确格式吗?(另外,PIL本身安装在2.7目录中。我可以将其移动到Python3目录中吗,还是需要重新安装?)每个Python都使用自己版本的模块,并将其保存在自己的文件夹中。您应该有pip
(pip2
)和pip3
,才能安装不同版本的模块。TypeError:参数13必须是字符串或只读缓冲区,不是dict
-似乎您必须创建一个包含所有数据的字符串。如果您使用Python2.7
,为什么在文件夹中为Python2.7
的模块设置了PIL
表示它是内部函数,不应由用户使用-因此不要期望im.save
将使用与\u getexif()
返回相同的格式。感谢您的建议。有人知道save调用中EXIF数据的正确格式吗?(另外,PIL本身安装在2.7目录中。我可以将其移动到Python3目录中吗,还是需要重新安装?)每个Python都使用自己版本的模块,并将其保存在自己的文件夹中。您应该有pip
(pip2
)和pip3
来安装不同版本的模块。
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