You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
4.1 KiB
113 lines
4.1 KiB
#!/usr/bin/python |
|
|
|
from operator import contains |
|
from PIL import Image |
|
import piexif |
|
import datetime, sys, os |
|
|
|
def get_exif_attr(attrid): |
|
items = dir(piexif.ExifIFD) |
|
for item in items: |
|
if not contains(item, '__'): |
|
if attrid == piexif.ExifIFD.__dict__[item]: |
|
return item |
|
items = dir(piexif.ImageIFD) |
|
for item in items: |
|
if not contains(item, '__'): |
|
if attrid == piexif.ImageIFD.__dict__[item]: |
|
return item |
|
return None |
|
|
|
def show_exif(img_path): |
|
img = Image.open(img_path) |
|
exif_dict = piexif.load(img.info['exif']) |
|
print('exif.0th:', exif_dict['0th']) |
|
print('exif_info of %s' % img_path) |
|
print('exif.0th:') |
|
for k, v in exif_dict['0th'].items(): |
|
key = get_exif_attr(k) |
|
print(key, v) |
|
|
|
print('Exif:') |
|
for k, v in exif_dict['Exif'].items(): |
|
key = get_exif_attr(k) |
|
if not (key == 'MakerNote' or key == 'UserComment'): |
|
print(key, v) |
|
|
|
print('exif.GPS: ', exif_dict['GPS']) |
|
print('exif.Interop: ', exif_dict['Interop']) |
|
print('exif.1st: ', exif_dict['1st']) |
|
|
|
def fix_exif(img_path): |
|
img = Image.open(img_path) |
|
exif_dict = piexif.load(img.info['exif']) |
|
exif_dict['Exif'][piexif.ExifIFD.MakerNote] = b'' |
|
exif_dict['Exif'][piexif.ExifIFD.UserComment] = b'' |
|
# exif_dict['0th'][piexif.ImageIFD.Make] = 'Huawei' |
|
# exif_dict['0th'][piexif.ImageIFD.Model] = 'Nexus 6P' |
|
# exif_dict['0th'][piexif.ImageIFD.Software] = 'sux V7' |
|
exif_dict['0th'][piexif.ImageIFD.ImageWidth] = 4056 |
|
exif_dict['0th'][piexif.ImageIFD.ImageLength] = 3040 |
|
if exif_dict['Exif'].get(piexif.ExifIFD.DigitalZoomRatio, 'havenothiskey') != 'havenothiskey': |
|
del(exif_dict['Exif'][piexif.ExifIFD.DigitalZoomRatio]) |
|
if exif_dict['Exif'].get(piexif.ExifIFD.FocalLengthIn35mmFilm, 'havenothiskey') != 'havenothiskey': |
|
del(exif_dict['Exif'][piexif.ExifIFD.FocalLengthIn35mmFilm]) |
|
if exif_dict['0th'].get(piexif.ImageIFD.Orientation, 'havenothiskey') != 'havenothiskey': |
|
del(exif_dict['0th'][piexif.ImageIFD.Orientation]) |
|
exif_dict['GPS'] = {} |
|
exif_bytes = piexif.dump(exif_dict) |
|
img.save(img_path, exif=exif_bytes) |
|
|
|
def fix_orientation(img_path): |
|
img = Image.open(img_path) |
|
exif_dict = piexif.load(img.info['exif']) |
|
exif_dict['0th'][piexif.ImageIFD.Orientation] = 1 |
|
exif_bytes = piexif.dump(exif_dict) |
|
img.save(img_path, exif=exif_bytes) |
|
|
|
def fix_optimize(img_path): |
|
img = Image.open(img_path) |
|
img.save(img_path, optimize=True, quality=95) |
|
|
|
def fix_rpi219(img_path): |
|
newfile = img_path.split('.')[0] + '.' + img_path.split('.')[-1] |
|
os.rename(img_path, newfile) |
|
|
|
def split(path, filename): |
|
photo1_path = path + os.sep + '.geometry' |
|
photo2_path = path + os.sep + '.texture.TextureLayer' |
|
if not os.path.exists(photo1_path): os.mkdir(photo1_path) |
|
if not os.path.exists(photo2_path): os.mkdir(photo2_path) |
|
# newfile = filename.split('_')[0] + filename[-4:] |
|
index = filename.split('_')[-1].split('.')[0] |
|
if index == '1': |
|
os.rename(path + os.sep + filename, photo1_path + os.sep + filename) |
|
print('%s -> %s' % (filename, photo1_path + os.sep + filename)) |
|
else: |
|
os.rename(path + os.sep + filename, photo2_path + os.sep + filename) |
|
print('%s -> %s' % (filename, photo2_path + os.sep + filename)) |
|
|
|
if __name__ == '__main__': |
|
if len(sys.argv) < 2: |
|
path = '.' |
|
else: |
|
path = sys.argv[1] |
|
path = os.path.abspath(path) |
|
|
|
if os.path.isdir(path): |
|
for file in os.listdir(path): |
|
if file.endswith('.jpg'): |
|
print('Fixing ' + file) |
|
split(path, file) |
|
# fix_rpi219(os.path.join(path, file)) |
|
# show_exif(os.path.join(path, file)) |
|
# fix_exif(path + '/' + file) |
|
# fix_orientation(path + '/' + file) |
|
# fix_optimize(path + '/' + file) |
|
else: |
|
print('Fixing ' + path) |
|
# fix_rpi219(path) |
|
# show_exif(path) |
|
# fix_exif(path) |
|
# fix_orientation(path) |
|
# fix_optimize(path)
|
|
|