前提・実現したいこと
写真のexif情報を書き換えたい
発生している問題・エラーメッセージ
このようなエラーが出ました。
UnboundLocalError Traceback (most recent call last) ~/Droon/image.py in <module> 43 exif_dict['GPS'][2] = tuple(map(tuple,a)) 44 exif_dict['GPS'][4] = tuple(map(tuple,b)) ---> 45 exif_bytes = piexif.dump(exif_dict) 46 47 fnn = 'DJI_'+num+'p.JPG' /data/kako/anaconda3/lib/python3.7/site-packages/piexif/_dump.py in dump(exif_dict_original) 72 exif_length = 0 73 if gps_is: ---> 74 gps_set = _dict_to_bytes(gps_ifd, "GPS", zeroth_length + exif_length) 75 gps_bytes = b"".join(gps_set) 76 gps_length = len(gps_bytes) /data/kako/anaconda3/lib/python3.7/site-packages/piexif/_dump.py in _dict_to_bytes(ifd_dict, ifd, ifd_offset) 335 length_str, value_str, four_bytes_over = _value_to_bytes(raw_value, 336 value_type, --> 337 offset) 338 except ValueError: 339 raise ValueError( /data/kako/anaconda3/lib/python3.7/site-packages/piexif/_dump.py in _value_to_bytes(raw_value, value_type, offset) 245 struct.pack(">L", den)) 246 value_str = struct.pack(">I", offset) --> 247 four_bytes_over = new_value 248 elif value_type == TYPES.SRational: 249 if isinstance(raw_value[0], numbers.Integral): UnboundLocalError: local variable 'new_value' referenced before assignment
コードはこちらです。
import
1import pandas as pd 2from fractions import Fraction 3import piexif 4from PIL import Image 5import droon1 6 7df = droon1.df 8df1 = df[df['isPhoto'] > 0] 9 10for i in range(2,88+1): 11 num = str(i).zfill(4) 12 fn = 'DJI_'+num+'.JPG' 13 rf = '../Photo/' + fn 14 img = Image.open(rf) 15 16 exif_dict = piexif.load(img.info['exif']) 17 18 exif_dict['GPS'][piexif.GPSIFD.GPSAltitude] = (df1.iloc[(i)-1][3],1) 19 20 lat = df1.iloc[(i)-1][0] 21 lat_a = int(lat) 22 lat_b = int((lat - lat_a)*60) 23 lat_c = ((lat - lat_a)*60-lat_b)*60*1000 24 25 lon = df1.iloc[(i)-1][1] 26 lon_a = int(lon) 27 lon_b = int((lon - lon_a)*60) 28 lon_c = ((lon - lon_a)*60-lon_b)*60*1000 29 30 a = np.array(exif_dict['GPS'][2]) 31 b = np.array(exif_dict['GPS'][4]) 32 33 print(a) 34 a[0,0] = lat_a 35 a[1,0] = lat_b 36 a[2,0] = lat_c 37 38 b[0,0] = lon_a 39 b[1,0] = lon_b 40 b[2,0] = lon_c 41 42 exif_dict['GPS'][2] = tuple(map(tuple,a)) 43 exif_dict['GPS'][4] = tuple(map(tuple,b)) 44 exif_bytes = piexif.dump(exif_dict) 45 46 fnn = 'DJI_'+num+'p.JPG' 47 rff = '../Photo/' + fnn 48 img.save(rff, "jpeg",exif=exif_bytes)
試したこと
df = droon1.df
df1 = df[df['isPhoto'] > 0]
をfor文の中に入れてみました。
floatをintに変えてみました。
import
1import pandas as pd 2from fractions import Fraction 3import piexif 4from PIL import Image 5import droon1 6 7df = droon1.df 8df1 = df[df['isPhoto'] > 0] 9 10for i in range(2,88+1): 11 num = str(i).zfill(4) 12 fn = 'DJI_'+num+'.JPG' 13 rf = '../Photo/' + fn 14 img = Image.open(rf) 15 16 exif_dict = piexif.load(img.info['exif']) 17 18 exif_dict['GPS'][piexif.GPSIFD.GPSAltitude] = (df1.iloc[(i)-1][3],1) 19 20 lat = df1.iloc[(i)-1][0] 21 lat_a = int(lat) 22 lat_b = int((lat - lat_a)*60) 23 lat_c = ((lat - lat_a)*60-lat_b)*60 24 lat_c = str(lat_c) 25 lat_c = lat_c.replace('.','') 26 lat_c = lat_c[:6] 27 lat_c = int(lat_c) 28 29 lon = df1.iloc[(i)-1][1] 30 lon_a = int(lon) 31 lon_b = int((lon - lon_a)*60) 32 lon_c = ((lon - lon_a)*60-lon_b)*60 33 lon_c = str(lon_c) 34 lon_c = lon_c.replace('.','') 35 lon_c = lon_c[:6] 36 lon_c = int(lon_c) 37 38 a = np.array(exif_dict['GPS'][2]) 39 b = np.array(exif_dict['GPS'][4]) 40 41 42 a[0,0] = lat_a 43 a[1,0] = lat_b 44 a[2,0] = lat_c 45 46 b[0,0] = lon_a 47 b[1,0] = lon_b 48 b[2,0] = lon_c 49 50 exif_dict['GPS'][2] = tuple(map(tuple,a)) 51 exif_dict['GPS'][4] = tuple(map(tuple,b)) 52 exif_bytes = piexif.dump(exif_dict) 53 54 fnn = 'DJI_'+num+'p.JPG' 55 rff = '../Photo/' + fnn 56 img.save(rff, "jpeg",exif=exif_bytes) 57コード
エラーの全文を見せてください
UnboundLocalError Traceback (most recent call last)
~/Droon/image.py in <module>
43 exif_dict['GPS'][2] = tuple(map(tuple,a))
44 exif_dict['GPS'][4] = tuple(map(tuple,b))
---> 45 exif_bytes = piexif.dump(exif_dict)
46
47 fnn = 'DJI_'+num+'p.JPG'
/data/kako/anaconda3/lib/python3.7/site-packages/piexif/_dump.py in dump(exif_dict_original)
72 exif_length = 0
73 if gps_is:
---> 74 gps_set = _dict_to_bytes(gps_ifd, "GPS", zeroth_length + exif_length)
75 gps_bytes = b"".join(gps_set)
76 gps_length = len(gps_bytes)
/data/kako/anaconda3/lib/python3.7/site-packages/piexif/_dump.py in _dict_to_bytes(ifd_dict, ifd, ifd_offset)
335 length_str, value_str, four_bytes_over = _value_to_bytes(raw_value,
336 value_type,
--> 337 offset)
338 except ValueError:
339 raise ValueError(
/data/kako/anaconda3/lib/python3.7/site-packages/piexif/_dump.py in _value_to_bytes(raw_value, value_type, offset)
245 struct.pack(">L", den))
246 value_str = struct.pack(">I", offset)
--> 247 four_bytes_over = new_value
248 elif value_type == TYPES.SRational:
249 if isinstance(raw_value[0], numbers.Integral):
UnboundLocalError: local variable 'new_value' referenced before assignment
これです。
質問の方でもお願いします
回答1件
あなたの回答
tips
プレビュー