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'} |