Files
2024-05-26 20:35:16 +08:00

4.4 KiB
Raw Permalink Blame History

Documentation

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