diff --git a/frame_opencv.py b/frame_opencv.py index dda167e..fbe25ff 100644 --- a/frame_opencv.py +++ b/frame_opencv.py @@ -800,15 +800,8 @@ def get_frames_list(folder:str): def get_frame_by_idx(folder:str, index:int): # Refresh file list existing_animation_files = get_frames_list(folder) - # Get last file # Filename pattern is A.0001.JPG - if index and index in range(len(existing_animation_files)): - frm = cv2.imread(os.path.join(folder, existing_animation_files[index])) - frm = cv2.resize(frm, (project_settings['screen_w'], project_settings['screen_h'])) - return frm - else: - return generate_text_image(_("Image not found."), project_settings['screen_w'], project_settings['screen_h']) - + return existing_animation_files[index].split('.') def get_last_frame(folder:str): # Refresh file list @@ -826,8 +819,11 @@ def get_before_last_frame(folder:str): return existing_animation_files[-2] -def get_onionskin_frame(folder:str): - prev_image = get_last_frame(folder) +def get_onionskin_frame(folder:str, index:int=-1): + if index == -1: + prev_image = get_last_frame(folder) + else: + prev_image = get_frame_by_idx(folder, index) prev_image = '.'.join(prev_image) if os.path.exists(os.path.expanduser(os.path.join(savepath, prev_image))): frm = cv2.imread(os.path.join(savepath, prev_image)) @@ -913,6 +909,18 @@ def batch_rename(folder:str): return get_frames_list(folder) +def batch_rename_reversed(folder:str, from_index:int=0): + # initialize counter to 0 + frame_list = get_frames_list(os.path.realpath(folder)) + print(frame_list[from_index:]) + counter = (".%04i." % x for x in count(len(frame_list), -1)) + for i in reversed(frame_list[from_index:]): + if os.path.exists(os.path.join(folder, i)): + cnt = next(counter) + os.rename(os.path.join(folder, i), os.path.join(folder, "{}{}{}".format(project_letter, cnt, project_settings['file_extension']))) + return get_frames_list(folder) + + def offset_dictvalues(from_index=0): dict_copy = dict(img_list) for i in range(from_index, len(dict_copy)): @@ -945,6 +953,19 @@ def remove_frame(img_list:list, img_index:int): else: return img_list, 0, blank_image +def insert_frame(img_list:list, frame_name:str, img_index:int): + if len(img_list) > img_index: + folder_path = os.path.realpath(savepath) + # ~ frame_name = img_list[img_index] + frame_path = os.path.join(folder_path, frame_name) + # ~ if not os.path.exists(frame_path): + # ~ return img_list, img_index, blank_image + print(_("Inserting {}").format(frame_path)) + # rename files and get new list + img_list = batch_rename_reversed(folder_path, img_index+1) + return img_list, img_index + else: + return img_list, 0 def testDevice(source): cap = cv2.VideoCapture(source) @@ -1155,7 +1176,12 @@ def main(args): # SPACE or numpad 0 pressed elif (k%256 == 32) or (k%256 == 48) or (k%256 == 176): print(_("Capture frame")) - img_name = return_next_frame_number(get_last_frame(savepath)) + # ~ img_name = return_next_frame_number(get_last_frame(savepath)) + img_name = return_next_frame_number(img_list[index].split('.')) + if img_name in img_list: + insert_frame(img_list, img_name, index) + else: + img_name = return_next_frame_number(get_last_frame(savepath)) img_path = os.path.join(savepath, img_name) capture_ok = cam.capture_frame(img_path) if capture_ok: @@ -1164,9 +1190,8 @@ def main(args): if len(img_list) and (img_list[index] == '{letter}.-001.{ext}'.format(letter=project_letter, ext=project_settings['file_extension'])): img_list[index] = img_name else: - # Move to last frame - index = len(img_list) - cam.frame = get_onionskin_frame(savepath) + index += 1 + cam.frame = get_onionskin_frame(savepath, index) cam.o_frame = cam.frame.copy() else: print(_("Error during capture. Try again."))