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