add reference code
add reference code
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import os.path
|
||||
import random
|
||||
import time
|
||||
import torch
|
||||
from PIL import Image
|
||||
from .imagefunc import log, tensor2pil, pil2tensor, load_light_leak_images, image_hue_offset, image_gray_offset, image_channel_merge, fit_resize_image, chop_image
|
||||
|
||||
|
||||
|
||||
blend_mode = 'screen'
|
||||
|
||||
class LightLeak:
|
||||
|
||||
def __init__(self):
|
||||
self.NODE_NAME = 'LightLeak'
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(self):
|
||||
light_list = ['random', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10',
|
||||
'11', '12', '13', '14', '15', '16', '17', '18', '19', '20',
|
||||
'21', '22', '23', '24', '25', '26', '27', '28', '29', '30',
|
||||
'31', '32']
|
||||
corner_list = ['left_top', 'right_top', 'left_bottom', 'right_bottom']
|
||||
return {
|
||||
"required": {
|
||||
"image": ("IMAGE", ),
|
||||
"light": (light_list,),
|
||||
"corner": (corner_list,),
|
||||
"hue": ("INT", {"default": 0, "min": -255, "max": 255, "step": 1}),
|
||||
"saturation": ("INT", {"default": 0, "min": -255, "max": 255, "step": 1}),
|
||||
"opacity": ("INT", {"default": 100, "min": 0, "max": 100, "step": 1})
|
||||
},
|
||||
"optional": {
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("IMAGE",)
|
||||
RETURN_NAMES = ("image",)
|
||||
FUNCTION = 'light_leak'
|
||||
CATEGORY = '😺dzNodes/LayerFilter'
|
||||
|
||||
def light_leak(self, image, light, corner, hue, saturation, opacity):
|
||||
|
||||
ret_images = []
|
||||
light_leak_images = load_light_leak_images()
|
||||
if light == 'random':
|
||||
random.seed(time.time())
|
||||
light_index = random.randint(0,31)
|
||||
else:
|
||||
light_index = int(light) - 1
|
||||
|
||||
for i in image:
|
||||
i = torch.unsqueeze(i, 0)
|
||||
_canvas = tensor2pil(i).convert('RGB')
|
||||
_light = light_leak_images[light_index]
|
||||
if _canvas.width < _canvas.height:
|
||||
_light = _light.transpose(Image.ROTATE_90).transpose(Image.FLIP_TOP_BOTTOM)
|
||||
if corner == 'right_top':
|
||||
_light = _light.transpose(Image.FLIP_LEFT_RIGHT)
|
||||
elif corner == 'left_bottom':
|
||||
_light = _light.transpose(Image.FLIP_TOP_BOTTOM)
|
||||
elif corner == 'right_bottom':
|
||||
_light = _light.transpose(Image.ROTATE_180)
|
||||
if hue != 0 or saturation != 0:
|
||||
_h, _s, _v = _light.convert('HSV').split()
|
||||
if hue != 0:
|
||||
_h = image_hue_offset(_h, hue)
|
||||
if saturation != 0:
|
||||
_s = image_gray_offset(_s, saturation)
|
||||
_light = image_channel_merge((_h, _s, _v), 'HSV')
|
||||
resize_sampler = Image.BILINEAR
|
||||
_light = fit_resize_image(_light, _canvas.width, _canvas.height, fit='crop', resize_sampler=resize_sampler)
|
||||
ret_image = chop_image(_canvas, _light, blend_mode=blend_mode, opacity = opacity)
|
||||
ret_images.append(pil2tensor(ret_image))
|
||||
|
||||
log(f"{self.NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
|
||||
return (torch.cat(ret_images, dim=0),)
|
||||
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"LayerFilter: LightLeak": LightLeak
|
||||
}
|
||||
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"LayerFilter: LightLeak": "LayerFilter: LightLeak"
|
||||
}
|
||||
Reference in New Issue
Block a user