Closed mb243 closed 5 years ago
I am having the same issue. It seems that if the JPG has any existing metadata it fails, but I am not sure which part of the metadata is causing it to fail. I have an image that fails every time, if I strip all the metadata then run it through Python again, it saves fine. A sample file can be found at http://crouchers.org/mike-test.jpg
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
A quick fix I have found is to comment out line 433 of iptcinfo3.py
out = [''.join(out)]
The function here is trying to combine binary strings with an empty regular string '' This is causing the exception. The correct code should read as follows -
out = [b''.join(out)]
@jcroucher @mb243 @Xankill3r thanks everyone for point this out, it has been merged and a new release version 2.1.4 pushed to pypi, please upgrade - pip3 install iptcinfo3 -U
and the saving works!
Sorry, it took me so long to do this, setting this repo to be in my watchlist now. Glad people are using it!
iptcinfo3 throws a traceback on every photo that I've tried it with so far. Even if I make no changes and just load and save the file, an error is thrown:
I'm not discounting that the files I've tried with may have unexpected data in them. If I use
exiftool
to delete the data in the file, I get another traceback:I'd be happy to share a file to help in debugging.