4.4 KiB
4.4 KiB
Documentation
- Class name: TransparentImage
- Category: ♾️Mixlab/Image
- Output node: True
- Repo Ref: https://github.com/shadowcz007/comfyui-mixlab-nodes.git
TransparentImage节点旨在处理和操作具有透明度的图像,提供创建和管理带有遮罩的图像的功能。它能够进行颜色反转、保存处理后的图像以及处理各种图像格式。该节点在增强视觉内容方面发挥着关键作用,通过将遮罩应用于图像,允许实现创新的视觉效果和修改。
Input types
Required
- images
- ‘images’参数对于节点的操作至关重要,因为它是将被处理的输入图像。这是一个关键元素,直接影响节点的输出,决定了将被转换和操作的视觉内容。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
- masks
- ‘masks’参数定义了将应用于输入图像的遮罩。它是节点功能的必要组成部分,因为它决定了图像中将受到遮罩处理影响的区域。
- Comfy dtype: MASK
- Python dtype: torch.Tensor
- invert
- ‘invert’参数允许在处理后的图像中反转颜色。这是一个可选功能,可以显著改变视觉结果,提供了一种在图像内部创建对比效果的手段。
- Comfy dtype: COMBO['yes', 'no']
- Python dtype: str
- save
- ‘save’参数决定处理后的图像是否会被保存到磁盘。这是节点的一个关键决策点,因为它影响对图像所做的视觉更改的持久性。
- Comfy dtype: COMBO['yes', 'no']
- Python dtype: str
- filename_prefix
- ‘filename_prefix’参数用于指定保存的图像文件的前缀。它提供了一种更有效地组织和识别输出文件的方法,增强了保存的视觉内容的可管理性。
- Comfy dtype: STRING
- Python dtype: str
Output types
- file_path
- ‘file_path’输出提供了保存的图像文件的路径。它很重要,因为它许用户定位和访问处理后的图像,以供进一步使用或分发。
- Comfy dtype: STRING
- Python dtype: str
- IMAGE
- ‘IMAGE’输出代表了以RGB格式处理后的图像。它是节点操作的直接结果,对于可视化对输入图像所做的修改至关重要。
- Comfy dtype: IMAGE
- Python dtype: torch.Tensor
- RGBA
- ‘RGBA’输出包含了带有透明度信息的处理后的图像。对于需要保留原始图像的alpha通道以进行进一步编辑或合成的应用来说,这是一个重要方面。
- Comfy dtype: RGBA
- Python dtype: torch.Tensor
Usage tips
- Infra type: CPU
Source code
class TransparentImage:
@classmethod
def INPUT_TYPES(s):
return {'required': {'images': ('IMAGE',), 'masks': ('MASK',), 'invert': (['yes', 'no'],), 'save': (['yes', 'no'],)}, 'optional': {'filename_prefix': ('STRING', {'multiline': False, 'default': 'Mixlab_save'})}, 'hidden': {'prompt': 'PROMPT', 'extra_pnginfo': 'EXTRA_PNGINFO'}}
RETURN_TYPES = ('STRING', 'IMAGE', 'RGBA')
RETURN_NAMES = ('file_path', 'IMAGE', 'RGBA')
OUTPUT_NODE = True
FUNCTION = 'run'
CATEGORY = '♾️Mixlab/Image'
OUTPUT_IS_LIST = (True, True, True)
def run(self, images, masks, invert, save, filename_prefix, prompt=None, extra_pnginfo=None):
ui_images = []
image_paths = []
count = images.shape[0]
masks_new = []
nh = masks.shape[0] // count
masks_new = masks
if images.shape[0] == masks.shape[0] and images.shape[1] == masks.shape[1] and (images.shape[2] == masks.shape[2]):
print('TransparentImage', images.shape, images.size(), masks.shape, masks.size())
elif nh * count == masks.shape[0]:
masks_new = split_mask_by_new_height(masks, nh)
else:
masks_new = split_mask_by_new_height(masks, masks.shape[0])
is_save = True if save == 'yes' else False
images_rgb = []
images_rgba = []
for i in range(len(images)):
image = images[i]
mask = masks_new[i]
result = doMask(image, mask, is_save, filename_prefix, invert, not is_save, prompt, extra_pnginfo)
for item in result['result']:
ui_images.append(item)
image_paths.append(result['image_path'])
images_rgb.append(result['im_tensor'])
images_rgba.append(result['im_rgba_tensor'])
return {'ui': {'images': ui_images, 'image_paths': image_paths}, 'result': (image_paths, images_rgb, images_rgba)}