Как я могу сохранить изменение _getexif после изменения значений тегов?

#python #exif

Вопрос:

я новичок в python и только что получил домашнее задание по EXIF-инструменту. А именно, я должен написать программу, которая может читать и изменять изображение. У меня есть 2 проблемы:

Во-первых, используя os.rename на macOS, это работает идеально, но когда я запускаю окно, у меня появляется ошибка (изображение )(изменение имени в исходном коде).

Во-вторых, я хочу изменить значение диафрагмы, поэтому я вынимаю exif_data[37378], затем изменяю значение, но не могу сохранить обратно в изображение(изменение диафрагмы в исходном коде)

 import piexif
from PIL import Image
import os
from fractions import *


#                                               Bild importieren
try:
    a = input('Geben Sie Bildname: ')
    img = Image.open(os.path.join(a))
    exif_dict = piexif.load(img.info['exif'])                   # print out all image's information
    exif_data = img._getexif()
except:
    None

# **********************************************************************************************************
# **********************************************************************************************************
#                                               Informationen

print(f'Typ:  tttttt    {img.format}')                                    # Format

print(f'Mod:  tttttt    {img.mode}')                                              # Mode

def get_date_taken(img):                                                                # Date
    try:
        exif_dict = piexif.load(img.info['exif'])
        t = str(exif_dict['0th'][306], 'utf-8')
        return t #Image.open(path)._getexif()[36867]
    except:
        return None
print(f'Ertellte Zeit:  ttt    {get_date_taken(img)}')

def get_aperture_value(path):                                                           # Blende
    try:
        aperture = Image.open(path)._getexif()[37378]
        return aperture
    except:
        return None
if get_aperture_value(a) == None:
    print(f'Blende:  ttttt    None')
else:
    print(f'Blende:  ttttt    {round(float(get_aperture_value(a)), 1)}')

def get_exposure_time(path):                                                            # Belichtungszeit
    try:
        exposure = Image.open(path)._getexif()[33434]
        return exposure
    except:
        return None
if get_exposure_time(a)==None:
    print(f'Belichtungszeit:  ttt    None')
else:
    print(f'Belichtungszeit:  ttt    {Fraction(get_exposure_time(a))}')

def get_focal_length(path):                                                             # Brennweite
    try:
        focal = Image.open(path)._getexif()[37386]
        return focal
    except:
        return None
if get_focal_length(a) == None:
    print(f'Brennweite:  tttt    None')
else:
    print(f'Brennweite:  tttt    {get_focal_length(a)} mm')

def get_iso(path):                                                                      # ISO-Werte
    try:
        iso = Image.open(path)._getexif()[34855]
        return iso
    except:
        return None
if get_iso(a) == None:
    print(f'ISO Werte:  tttt    None')
else:
    print(f'ISO Werte:  tttt    {get_iso(a)}')

def get_flash(path):                                                                    # Blitzinformation
    try:
        flash = Image.open(path)._getexif()[37385]
        if flash is True:
            return 'Blitz benutzt'
        else:
            return 'Kein Blitz'
    except:
        return 'Kein Blitz'
if get_flash(a) == None:
    print(f'Blitzinformation:  ttt    Kein Blitz')
else:
    print(f'Blitzinformation:  ttt    {get_flash(a)}')

# **********************************************************************************************************
# **********************************************************************************************************
#                                               Änderungsfunktionen

#exif_dict = piexif.load(img.info['exif'])
def namechange(a):                                     <----here                                 # Name ändern
    b = input('Geben neue Name an: ')
    os.rename(os.path.join(a), os.path.join(b))

def timechange(a):
    exif_dict['0th'][306] = input('Bitte Format: jj/mm/tt und Stunde:Minute:Sekunde ')
    exif_new_image = piexif.dump(exif_dict)
    img.save(a, exif=exif_new_image)

def aperturechange(a):                                     <------here       
    img = Image.open(a)
    exif_data = img._getexif()                       
    exif_data[37378] = str(input('Give new value: '))







# **********************************************************************************************************
# **********************************************************************************************************
#                                               Benutzeroberfläche
wollen = input('Wollen Sie was ändern? j/n: ')
if wollen == 'j':
    print('Was wollen Sie ändern? Wählen Sie in der folgenden Liste aus:')
    ans = True
    while ans:
        print('''
        1.Name
        2.Datum und Zeit
        3.Blende
        4.Belichtungszeit
        5.Brennweiter
        6.ISO-Werte
        7.Blitzinformation
        8.Exit
        ''')
        ans = input('Was wollen Sie machen? ')
        if ans == '1':
            namechange(a)
            print('n Name schon geändert')
        elif ans == '2':
            timechange(a)
            print('n Datum und Zeit schon geändert')
        elif ans == '3':
            aperturechange(a)
            img.save(a)
            print('n Blende schon geändert')
        elif ans == '4':
            print('n Belichtungszeit schon geändert ')
        elif ans == '5':
            print('n Brennweiter schon geändert')
        elif ans == '6':
            print('n ISO-Werte schon geändert')
        elif ans == '7':
            print('n Blitzinformation schon geändert')
        elif ans == '8':
            print('n Ciao!')
            break
        elif ans != '':
            print("n Not Valid Choice Try again")
elif wollen == 'n':
    print('End') 

(строка 105).

Пожалуйста, помогите мне. Спасибо всем