遮罩图加载

This commit is contained in:
刘雪峰
2024-01-02 16:04:38 +08:00
parent b4dcf8859e
commit 200b160c39
2 changed files with 50 additions and 0 deletions
+44
View File
@@ -12,6 +12,9 @@ from easyapi.util import tensor_to_pil
class Base64ToImage:
"""
图片的base64格式还原成图片的张量
"""
@classmethod
def INPUT_TYPES(self):
return {"required": {
@@ -178,6 +181,45 @@ class MaskToBase64(MaskImageToBase64):
return super().convert(mask)
class Base64ToMask:
"""
mask的base64图片还原成mask的张量
"""
_color_channels = ["red", "green", "blue", "alpha"]
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"base64Images": ("STRING", {"forceInput": True}),
"channel": (s._color_channels, {"default": s._color_channels[0]}), }
}
CATEGORY = "EasyApi/Image"
RETURN_TYPES = ("MASK",)
FUNCTION = "base64image_to_mask"
def base64image_to_mask(self, base64Images, channel=_color_channels[0]):
base64ImageJson = JSONDecoder().decode(s=base64Images)
for base64Image in base64ImageJson:
i = base64_to_image(base64Image)
# 下面代码参考LoadImage
i = ImageOps.exif_transpose(i)
if i.getbands() != ("R", "G", "B", "A"):
i = i.convert("RGBA")
mask = None
c = channel[0].upper()
if c in i.getbands():
mask = np.array(i.getchannel(c)).astype(np.float32) / 255.0
mask = torch.from_numpy(mask)
if c == 'A':
mask = 1. - mask
else:
mask = torch.zeros((64,64), dtype=torch.float32, device="cpu")
return (mask.unsqueeze(0),)
class LoadImageToBase64(LoadImage):
RETURN_TYPES = ("STRING", "IMAGE", "MASK", )
RETURN_NAMES = ("base64Images", "IMAGE", "MASK", )
@@ -228,6 +270,7 @@ NODE_CLASS_MAPPINGS = {
"Base64ToImage": Base64ToImage,
"ImageToBase64": ImageToBase64,
# "MaskToBase64": MaskToBase64,
"Base64ToMask": Base64ToMask,
"ImageToBase64Advanced": ImageToBase64Advanced,
"MaskToBase64Image": MaskToBase64Image,
"MaskImageToBase64": MaskImageToBase64,
@@ -239,6 +282,7 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"Base64ToImage": "Base64 To Image",
"ImageToBase64": "Image To Base64",
# "MaskToBase64": "Mask To Base64",
"Base64ToMask": "Base64 To Mask",
"ImageToBase64Advanced": "Image To Base64 (Advanced)",
"MaskToBase64Image": "Mask To Base64 Image",
"MaskImageToBase64": "Mask Image To Base64",
+6
View File
@@ -49,6 +49,12 @@ class EasyApiWorkflows {
output[o].inputs = {
"images": node.inputs.images
}
} else if (node.class_type == "LoadImageMask") {
output[o].class_type = "Base64ToMask";
output[o].inputs = {
"base64Images":"",
"channel": "red"
}
}
}
return output