代码拉取完成,页面将自动刷新
同步操作将从 yanlang0123/ComfyUI_Lam 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import math
import torch
import comfy.utils
import numpy as np
import cv2
class LoadReplaceImage:
@classmethod
def INPUT_TYPES(s):
return {"required":
{"image_t": ("IMAGE", ),
"mask": ("MASK",),
"image_bt": ("IMAGE", ),
"x": ("INT", {"default": 0, "min": 0, "max": 99999, "step": 1}),
"y": ("INT", {"default": 0, "min": 0, "max": 99999, "step": 1}),
},
}
CATEGORY = "lam"
RETURN_TYPES = ("IMAGE",)
RETURN_NAMES = ("图片",)
FUNCTION = "load_replace_image"
def load_replace_image(self, image_t,mask,image_bt,x,y):
mask_erosion = mask
# if image_t.shape != image_bt.shape:
# image_bt = image_bt.permute(0, 3, 1, 2)
# image_bt = comfy.utils.common_upscale(image_bt, image_t.shape[2], image_t.shape[1], upscale_method='bicubic', crop='center')
# image_bt = image_bt.permute(0, 2, 3, 1)
replace_image = self.blend_mode(image_t, image_bt, mask_erosion,x,y)
return (replace_image,)
def blend_mode(self, img1, img2, mask,y,x):
mask_np=mask.numpy()
if mask_np.ndim==2:
mask_np=np.expand_dims(mask_np, axis=0)
mask_shape=mask_np.shape
img1_shape=img1.size()
img2_shape=img2.size()
print("=====------=======",mask_shape)
if tuple(mask_shape)!=tuple(img1_shape):
maskList=[]
for i in range(mask_shape[0]):
maskList.append(cv2.resize(mask_np[i],(img1_shape[2],img1_shape[1])))
mask_np=np.array(maskList)
mask_shape=mask_np.shape
mask_np_rgb = np.zeros((mask_shape[0],mask_shape[1],mask_shape[2],3))
mask_np_rgb[:,:,:,0] = mask_np
mask_np_rgb[:,:,:,1] = mask_np
mask_np_rgb[:,:,:,2] = mask_np
mask=torch.from_numpy(mask_np_rgb)
print("-----------",mask.size())
print("-----------",img1_shape)
print("-----------",img2_shape)
#取最少图片数量
min_size=img2_shape[0] if img1_shape[0]>img2_shape[0] else img1_shape[0]
#图片大小不一致时,返回被替换内容
if tuple(mask.size()[1:])!=tuple(img1_shape[1:]) or x+img1_shape[1]>img2_shape[1] or y+img1_shape[2]>img2_shape[2]:
return img2
print("min_size::::",str(min_size))
img1[:min_size]=img1[:min_size]*mask[:min_size]
img2[:min_size,x:x+img1_shape[1],y:y+img1_shape[2]]=img2[:min_size,x:x+img1_shape[1],y:y+img1_shape[2]]*(1-mask[:min_size])
img2[:min_size,x:x+img1_shape[1],y:y+img1_shape[2]]=img1[:min_size]+img2[:min_size,x:x+img1_shape[1],y:y+img1_shape[2]]
return img2
NODE_CLASS_MAPPINGS = {
"LoadReplaceImage": LoadReplaceImage
}
NODE_DISPLAY_NAME_MAPPINGS = {
"LoadReplaceImage": "图片局部替换"
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。