65 lines
2.7 KiB
Markdown
65 lines
2.7 KiB
Markdown
# Documentation
|
|
- Class name: ImagePaste
|
|
- Category: Mikey/Image
|
|
- Output node: False
|
|
- Repo Ref: https://github.com/bash-j/mikey_nodes
|
|
|
|
ImagePaste节点旨在将前景图像无缝集成到背景图像上的指定位置。它通过将图像的张量表示转换为PIL图像,操作alpha通道以实现透明度,并在确切坐标处将前景粘贴到背景上,从而实现此目的。该节点对于需要精确控制图像放置的图像合成任务至关重要。
|
|
|
|
# Input types
|
|
## Required
|
|
- background_image
|
|
- 背景图像是前景将被粘贴的地方。它作为合成的画布,对输出图像的最终外观至关重要。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: torch.Tensor
|
|
- foreground_image
|
|
- 将放置在背景图像上的图像。它很重要,因为它定义了最终图像中在视觉上突出的主题或元素。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: torch.Tensor
|
|
## Optional
|
|
- x_position
|
|
- 在背景上,前景图像左上角将被放置的水平位置。它很重要,因为它决定了图像在组合中的具体放置位置。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- y_position
|
|
- 在背景上,前景图像左上角将被放置的垂直位置。它与x_position一起工作,以设定粘贴图像的精确位置。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
|
|
# Output types
|
|
- image
|
|
- 在指定位置将前景粘贴到背景上后得到的图像结果。它代表了最终的组合,是节点的主要输出。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: torch.Tensor
|
|
|
|
# Usage tips
|
|
- Infra type: CPU
|
|
|
|
# Source code
|
|
```
|
|
class ImagePaste:
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {'required': {'background_image': ('IMAGE',), 'foreground_image': ('IMAGE',), 'x_position': ('INT', {'default': 0, 'min': -10000, 'max': 10000}), 'y_position': ('INT', {'default': 0, 'min': -10000, 'max': 10000})}}
|
|
RETURN_TYPES = ('IMAGE',)
|
|
RETURN_NAMES = ('image',)
|
|
FUNCTION = 'paste'
|
|
CATEGORY = 'Mikey/Image'
|
|
|
|
def tensor2pil(self, image):
|
|
image_np = np.clip(255.0 * image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8)
|
|
if image_np.shape[0] == 4:
|
|
return Image.fromarray(image_np.transpose(1, 2, 0), 'RGBA')
|
|
else:
|
|
return Image.fromarray(image_np.transpose(1, 2, 0), 'RGB')
|
|
|
|
def paste(self, background_image, foreground_image, x_position, y_position):
|
|
background_image = tensor2pil(background_image)
|
|
foreground_image = tensor2pil(foreground_image)
|
|
if foreground_image.mode != 'RGBA':
|
|
foreground_image = foreground_image.convert('RGBA')
|
|
(r, g, b, alpha) = foreground_image.split()
|
|
background_image.paste(foreground_image, (x_position, y_position), mask=alpha)
|
|
return (pil2tensor(background_image),)
|
|
``` |