如何在JPG图像中添加关键词到IPTC数据?

3
我试图向JPG文件的IPTC数据添加关键字,但失败了。我能够使用iptcinfo3库读取关键字,并似乎将关键字附加到当前关键字列表中,但当我尝试将这些关键字写回JPG文件时(如果不是更早的话),我失败了。错误消息对我来说有点不清楚,实际上可能涉及新关键字的附加(尽管打印语句似乎表明已经成功)。
我尝试了三个不同的元数据库(似乎没有标准),并且这是我使用它们中任何一个所达到的最远进展(其中一个甚至无法安装,另一个无法运行)。这看起来很基础,但我想不出来,也无法适应我在网上看到的少数其他代码示例,包括iptcinfo3的示例代码片段。
当前的错误消息是:
| => pipenv run python editMetadata.py
WARNING: problems with charset recognition (b'\x1b')
[b'Gus']
[b'Gus', b'frog']
Traceback (most recent call last):
  File "editMetadata.py", line 22, in <module>
    info.save_as('Gus2.jpg')
  File "/Users/Scott/.local/share/virtualenvs/editPhotoMetadata-tx0JAOmI/lib/python3.7/site-packages/iptcinfo3.py", line 635, in save_as
jpeg_parts = jpeg_collect_file_parts(fh)
  File "/Users/Scott/.local/share/virtualenvs/editPhotoMetadata-tx0JAOmI/lib/python3.7/site-packages/iptcinfo3.py", line 324, in jpeg_collect_file_parts
adobeParts = collect_adobe_parts(partdata)
  File "/Users/Scott/.local/share/virtualenvs/editPhotoMetadata-tx0JAOmI/lib/python3.7/site-packages/iptcinfo3.py", line 433, in collect_adobe_parts
out = [''.join(out)]
TypeError: sequence item 0: expected str instance, bytes found

代码:

from iptcinfo3 import IPTCInfo
import os


# Create new info object
info = IPTCInfo('Gus.jpg')

# Print list of keywords
print(info['keywords'])

# Append the keyword I want to add
info['keywords'].append(b'frog')

# Print to test keyword has been added
print(info['keywords'])

# Save new info to file
info.save()
info.save_as('Gus2.jpg')

此问题已在2.1.4版本中得到解决(我维护这个pypi仓库)。请将iptcinfo3升级到最新版本。如果仍无法正常工作,请在github上提交一个issue。 - james-see
2个回答

2

使用等于号 "=" 而不是追加

from iptcinfo3 import IPTCInfo

info = IPTCInfo('Gus.jpg')
print(info['keywords'])

# add keyword
info['keywords'] = ['new keyword']

info.save()
info.save_as('Gus_2.jpg')

0

我遇到了同样的错误。看起来这是一个与文件保存有关的问题。

from iptcinfo3 import IPTCInfo
info = IPTCInfo('image.jpg', force=True)
info.save()

这让我得到了相同的错误。

WARNING: problems with charset recognition (b'\x1b')
WARNING: problems with charset recognition (b'\x1b')
Traceback (most recent call last):
  File "./searchimages.py", line 123, in <module>
    main(sys.argv[1:])
  File "./searchimages.py", line 119, in main
    find_photos(str(sys.argv[1]))
  File "./searchimages.py", line 46, in find_photos
    write_keywords(image, current_keywords, new_keywords)
  File "./searchimages.py", line 109, in write_keywords
    info.save_as('out.jpg')
  File "/usr/local/lib/python3.7/site-packages/iptcinfo3.py", line 635, in save_as
    jpeg_parts = jpeg_collect_file_parts(fh)
  File "/usr/local/lib/python3.7/site-packages/iptcinfo3.py", line 324, in jpeg_collect_file_parts
    adobeParts = collect_adobe_parts(partdata)
  File "/usr/local/lib/python3.7/site-packages/iptcinfo3.py", line 433, in collect_adobe_parts
    out = [''.join(out)]
TypeError: sequence item 0: expected str instance, bytes found

1
这个问题已经解决了,当我们将它从Python 2移植到Python 3时,出现了一个字节的问题。现在在最新版本2.1.4中已经修复。请通过pip3 install iptcinfo3 -U升级,并再次尝试。现在应该可以正常工作了。 - james-see

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接