#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).
Пожалуйста, помогите мне. Спасибо всем