Как добавить ключевые слова к данным IPTC в формате JPG?

Я пытаюсь добавить ключевые слова к данным IPTC в файле JPG и терпит неудачу. Я могу читать ключевые слова с помощью библиотеки 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')
1
задан Scott 17 January 2019 в 06:09
поделиться

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
ответ дан Zaraki Kenpachi 17 January 2019 в 06:09
поделиться

У меня та же ошибка. Кажется, проблема с сохранением зависит от файла.

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
0
ответ дан John Croucher 17 January 2019 в 06:09
поделиться