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