Я пытаюсь использовать (возможно, слегка измененные) EXIF-данные (т. е. тег 306 «DateTime») для записи нового файла jpg. Однако при чтении данных EXIF из нового файла возникают проблемы из-за явно неправильных дополненных данных. Посмотрите это:
Оригинальные теги:
Код: Выделить всё
36867 : DateTimeOriginal : 2003:01:12 03:04:15
36868 : DateTimeDigitized : 2003:01:12 03:04:15
306 : DateTime : 2003:01:12 03:04:15
Код: Выделить всё
36867 : DateTimeOriginal : 3:04:152003:01:12 0
36868 : DateTimeDigitized : 3:04:152003:01:12 0
306 : DateTime : ´2003:01:12 0
Весь тестовый код, который я использую, выглядит следующим образом:
Код: Выделить всё
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import PIL.Image
import PIL.ExifTags
def fingerExifAndSave(source,target):
im=PIL.Image.open(source)
imexif=im.getexif()
if False : # False True
print("Change tag 306 (DateTime) to something wired for debugging")
imexif[306] = 'abcdefghijklmnopqrs' # tag 306 means "DateTime"
imexif[306] = '2066:55:44 33:22:11'
print(" Tag 306 is now set to :",imexif[306] )
else:
print("NO MODIFICATION TO TAG 306 ('DateTime')!")
# Due to "/usr/lib/p*3/dist*/PIL/TiffImagePlugin.py:588: UserWarning: \
# Metadata Warning, tag 282 had too many entries: 2, expected 1 "
if False : # False True
print("Repairing something for some unknown reason due to warning")
for r in (282,283): imexif[r]= imexif[r][0]
else:
print("NO REAPIRING TO TAGS (282,283)!")
rc=im.save(target, exif=imexif) # Save using the optionally modified EXIF
print("Image written to:",target," with rc =",rc )
im.close()
imexif=None
def showSomeExifTags(myfile):
showThisTags=[306,36867,36868,305] # 'DateTime'-entries and 'Software'
im=PIL.Image.open(myfile)
imexif=im.getexif()
print("\nSome EXIF-tags from '"+myfile+"' (among other):")
print("KeyNr : KeyName"+" "*21+": Value")
for k,v in imexif.items():
if k in showThisTags:
if len(str(v)) > 30 : v=str(v[0:20])+"..." # keep it smooth
print(f"{k:>5} : {PIL.ExifTags.TAGS[k]:27} : {v}")
im.close()
print()
def main():
source="./orig2.jpg" # "./orig2.jpg"
target="./modified.jpg"
print ("PIL.Image.__version__ in use:",PIL.Image.__version__)
showSomeExifTags(source)
fingerExifAndSave(source,target)
showSomeExifTags(target)
if __name__ == "__main__":
main()
Есть ли известная ошибка, которую я пропустил при поиске в Интернете?
Как обойти эту проблему?
Мобильная версия