193 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			193 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import bpy, os, time, importlib | ||
|  | 
 | ||
|  | class TLM_ImageUpscale(bpy.types.Operator): | ||
|  |     bl_idname = "tlm.image_upscale" | ||
|  |     bl_label = "Upscale image" | ||
|  |     bl_description = "Upscales the image to double resolution" | ||
|  |     bl_options = {'REGISTER', 'UNDO'} | ||
|  | 
 | ||
|  |     def invoke(self, context, event): | ||
|  | 
 | ||
|  |         cv2 = importlib.util.find_spec("cv2") | ||
|  | 
 | ||
|  |         if cv2 is None: | ||
|  |             print("CV2 not found - Ignoring filtering") | ||
|  |             return 0 | ||
|  |         else: | ||
|  |             cv2 = importlib.__import__("cv2") | ||
|  | 
 | ||
|  |         for area in bpy.context.screen.areas: | ||
|  |             if area.type == "IMAGE_EDITOR": | ||
|  |                 active_image = area.spaces.active.image | ||
|  | 
 | ||
|  |         if active_image.source == "FILE": | ||
|  |             img_path = active_image.filepath_raw | ||
|  |             filename = os.path.basename(img_path) | ||
|  | 
 | ||
|  |             basename = os.path.splitext(filename)[0] | ||
|  |             extension = os.path.splitext(filename)[1] | ||
|  | 
 | ||
|  |             size_x = active_image.size[0] | ||
|  |             size_y = active_image.size[1] | ||
|  | 
 | ||
|  |             dir_path = os.path.dirname(os.path.realpath(img_path)) | ||
|  | 
 | ||
|  |             #newfile = os.path.join(dir_path, basename + "_" + str(size_x) + "_" + str(size_y) + extension) | ||
|  |             newfile = os.path.join(dir_path, basename + extension) | ||
|  |             os.rename(img_path, newfile) | ||
|  | 
 | ||
|  |             basefile = cv2.imread(newfile, cv2.IMREAD_UNCHANGED) | ||
|  | 
 | ||
|  |             scale_percent = 200 # percent of original size | ||
|  |             width = int(basefile.shape[1] * scale_percent / 100) | ||
|  |             height = int(basefile.shape[0] * scale_percent / 100) | ||
|  |             dim = (width, height) | ||
|  | 
 | ||
|  |             if active_image.TLM_ImageProperties.tlm_image_scale_method == "Nearest": | ||
|  |                 interp = cv2.INTER_NEAREST | ||
|  |             elif active_image.TLM_ImageProperties.tlm_image_scale_method == "Area": | ||
|  |                 interp = cv2.INTER_AREA | ||
|  |             elif active_image.TLM_ImageProperties.tlm_image_scale_method == "Linear": | ||
|  |                 interp = cv2.INTER_LINEAR | ||
|  |             elif active_image.TLM_ImageProperties.tlm_image_scale_method == "Cubic": | ||
|  |                 interp = cv2.INTER_CUBIC | ||
|  |             elif active_image.TLM_ImageProperties.tlm_image_scale_method == "Lanczos": | ||
|  |                 interp = cv2.INTER_LANCZOS4 | ||
|  | 
 | ||
|  |             resized = cv2.resize(basefile, dim, interpolation = interp) | ||
|  | 
 | ||
|  |             #resizedFile = os.path.join(dir_path, basename + "_" + str(width) + "_" + str(height) + extension) | ||
|  |             resizedFile = os.path.join(dir_path, basename + extension) | ||
|  | 
 | ||
|  |             cv2.imwrite(resizedFile, resized) | ||
|  | 
 | ||
|  |             active_image.filepath_raw = resizedFile | ||
|  |             bpy.ops.image.reload() | ||
|  | 
 | ||
|  |             print(newfile) | ||
|  |             print(img_path) | ||
|  |          | ||
|  |         else: | ||
|  | 
 | ||
|  |             print("Please save image") | ||
|  | 
 | ||
|  |         print("Upscale") | ||
|  | 
 | ||
|  |         return {'RUNNING_MODAL'} | ||
|  | 
 | ||
|  | class TLM_ImageDownscale(bpy.types.Operator): | ||
|  |     bl_idname = "tlm.image_downscale" | ||
|  |     bl_label = "Downscale image" | ||
|  |     bl_description = "Downscales the image to double resolution" | ||
|  |     bl_options = {'REGISTER', 'UNDO'} | ||
|  | 
 | ||
|  |     def invoke(self, context, event): | ||
|  | 
 | ||
|  |         cv2 = importlib.util.find_spec("cv2") | ||
|  | 
 | ||
|  |         if cv2 is None: | ||
|  |             print("CV2 not found - Ignoring filtering") | ||
|  |             return 0 | ||
|  |         else: | ||
|  |             cv2 = importlib.__import__("cv2") | ||
|  | 
 | ||
|  |         for area in bpy.context.screen.areas: | ||
|  |             if area.type == "IMAGE_EDITOR": | ||
|  |                 active_image = area.spaces.active.image | ||
|  | 
 | ||
|  |         if active_image.source == "FILE": | ||
|  |             img_path = active_image.filepath_raw | ||
|  |             filename = os.path.basename(img_path) | ||
|  | 
 | ||
|  |             basename = os.path.splitext(filename)[0] | ||
|  |             extension = os.path.splitext(filename)[1] | ||
|  | 
 | ||
|  |             size_x = active_image.size[0] | ||
|  |             size_y = active_image.size[1] | ||
|  | 
 | ||
|  |             dir_path = os.path.dirname(os.path.realpath(img_path)) | ||
|  | 
 | ||
|  |             #newfile = os.path.join(dir_path, basename + "_" + str(size_x) + "_" + str(size_y) + extension) | ||
|  |             newfile = os.path.join(dir_path, basename + extension) | ||
|  |             os.rename(img_path, newfile) | ||
|  | 
 | ||
|  |             basefile = cv2.imread(newfile, cv2.IMREAD_UNCHANGED) | ||
|  | 
 | ||
|  |             scale_percent = 50 # percent of original size | ||
|  |             width = int(basefile.shape[1] * scale_percent / 100) | ||
|  |             height = int(basefile.shape[0] * scale_percent / 100) | ||
|  |             dim = (width, height) | ||
|  | 
 | ||
|  |             if dim[0] > 1 or dim[1] > 1: | ||
|  | 
 | ||
|  |                 if active_image.TLM_ImageProperties.tlm_image_scale_method == "Nearest": | ||
|  |                     interp = cv2.INTER_NEAREST | ||
|  |                 elif active_image.TLM_ImageProperties.tlm_image_scale_method == "Area": | ||
|  |                     interp = cv2.INTER_AREA | ||
|  |                 elif active_image.TLM_ImageProperties.tlm_image_scale_method == "Linear": | ||
|  |                     interp = cv2.INTER_LINEAR | ||
|  |                 elif active_image.TLM_ImageProperties.tlm_image_scale_method == "Cubic": | ||
|  |                     interp = cv2.INTER_CUBIC | ||
|  |                 elif active_image.TLM_ImageProperties.tlm_image_scale_method == "Lanczos": | ||
|  |                     interp = cv2.INTER_LANCZOS4 | ||
|  | 
 | ||
|  |                 resized = cv2.resize(basefile, dim, interpolation = interp) | ||
|  | 
 | ||
|  |                 #resizedFile = os.path.join(dir_path, basename + "_" + str(width) + "_" + str(height) + extension) | ||
|  |                 resizedFile = os.path.join(dir_path, basename + extension) | ||
|  | 
 | ||
|  |                 cv2.imwrite(resizedFile, resized) | ||
|  | 
 | ||
|  |                 active_image.filepath_raw = resizedFile | ||
|  |                 bpy.ops.image.reload() | ||
|  | 
 | ||
|  |                 print(newfile) | ||
|  |                 print(img_path) | ||
|  |          | ||
|  |         else: | ||
|  | 
 | ||
|  |             print("Please save image") | ||
|  | 
 | ||
|  |         print("Upscale") | ||
|  | 
 | ||
|  |         return {'RUNNING_MODAL'} | ||
|  | 
 | ||
|  | class TLM_ImageSwitchUp(bpy.types.Operator): | ||
|  |     bl_idname = "tlm.image_switchup" | ||
|  |     bl_label = "Quickswitch Up" | ||
|  |     bl_description = "Switches to a cached upscaled image" | ||
|  |     bl_options = {'REGISTER', 'UNDO'} | ||
|  | 
 | ||
|  |     def invoke(self, context, event): | ||
|  | 
 | ||
|  |         for area in bpy.context.screen.areas: | ||
|  |             if area.type == "IMAGE_EDITOR": | ||
|  |                 active_image = area.spaces.active.image | ||
|  | 
 | ||
|  |         if active_image.source == "FILE": | ||
|  |             img_path = active_image.filepath_raw | ||
|  |             filename = os.path.basename(img_path) | ||
|  | 
 | ||
|  |         print("Switch up") | ||
|  | 
 | ||
|  |         return {'RUNNING_MODAL'} | ||
|  | 
 | ||
|  | class TLM_ImageSwitchDown(bpy.types.Operator): | ||
|  |     bl_idname = "tlm.image_switchdown" | ||
|  |     bl_label = "Quickswitch Down" | ||
|  |     bl_description = "Switches to a cached downscaled image" | ||
|  |     bl_options = {'REGISTER', 'UNDO'} | ||
|  | 
 | ||
|  |     def invoke(self, context, event): | ||
|  | 
 | ||
|  |         for area in bpy.context.screen.areas: | ||
|  |             if area.type == "IMAGE_EDITOR": | ||
|  |                 active_image = area.spaces.active.image | ||
|  | 
 | ||
|  |         if active_image.source == "FILE": | ||
|  |             img_path = active_image.filepath_raw | ||
|  |             filename = os.path.basename(img_path) | ||
|  | 
 | ||
|  |         print("Switch Down") | ||
|  | 
 | ||
|  |         return {'RUNNING_MODAL'} |