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