270 lines
8.3 KiB
Markdown
270 lines
8.3 KiB
Markdown
|
|
# Documentation
|
|
- Class name: `ImageDrawRectangleRounded`
|
|
- Category: `image/draw`
|
|
- Output node: `False`
|
|
|
|
ImageDrawRectangleRounded节点用于在图像上绘制圆角矩形。它允许对矩形的外观进行详细定制,包括大小、边框颜色、填充颜色和角半径,从而创建具有圆角的视觉吸引力图形。
|
|
|
|
# Input types
|
|
## Required
|
|
- **`width`**
|
|
- 绘制圆角矩形的画布宽度。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`height`**
|
|
- 绘制圆角矩形的画布高度。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`start_x`**
|
|
- 矩形起点的x坐标,定义矩形在x轴上的位置。
|
|
- Comfy dtype: `FLOAT`
|
|
- Python dtype: `int`
|
|
- **`start_y`**
|
|
- 矩形起点的y坐标,定义矩形在y轴上的位置。
|
|
- Comfy dtype: `FLOAT`
|
|
- Python dtype: `int`
|
|
- **`end_x`**
|
|
- 矩形终点的x坐标,决定矩形的宽度。
|
|
- Comfy dtype: `FLOAT`
|
|
- Python dtype: `int`
|
|
- **`end_y`**
|
|
- 矩形终点的y坐标,决定矩形的高度。
|
|
- Comfy dtype: `FLOAT`
|
|
- Python dtype: `int`
|
|
- **`radius`**
|
|
- 角的半径,指定圆角的程度。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`outline_size`**
|
|
- 矩形轮廓的粗细,用于自定义边框的外观。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`outline_red`**
|
|
- 轮廓颜色的红色分量,影响矩形边框的整体颜色。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`outline_green`**
|
|
- 轮廓颜色的绿色分量,影响矩形边框的整体颜色。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`outline_blue`**
|
|
- 轮廓颜色的蓝色分量,影响矩形边框的整体颜色。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`outline_alpha`**
|
|
- 轮廓的透明度值,用于调整边框的不透明度。
|
|
- Comfy dtype: `FLOAT`
|
|
- Python dtype: `float`
|
|
- **`fill_red`**
|
|
- 矩形填充颜色的红色分量,决定矩形内部的主要颜色。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`fill_green`**
|
|
- 矩形填充颜色的绿色分量,决定矩形内部的主要颜色。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`fill_blue`**
|
|
- 矩形填充颜色的蓝色分量,决定矩形内部的主要颜色。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`fill_alpha`**
|
|
- 填充的透明度值,用于调整矩形内部的不透明度。
|
|
- Comfy dtype: `FLOAT`
|
|
- Python dtype: `float`
|
|
- **`top_left_corner`**
|
|
- 指示左上角是否应为圆角的标志。
|
|
- Comfy dtype: `COMBO[STRING]`
|
|
- Python dtype: `bool`
|
|
- **`top_right_corner`**
|
|
- 指示右上角是否应为圆角的标志。
|
|
- Comfy dtype: `COMBO[STRING]`
|
|
- Python dtype: `bool`
|
|
- **`bottom_right_corner`**
|
|
- 指示右下角是否应为圆角的标志。
|
|
- Comfy dtype: `COMBO[STRING]`
|
|
- Python dtype: `bool`
|
|
- **`bottom_left_corner`**
|
|
- 指示左下角是否应为圆角的标志。
|
|
- Comfy dtype: `COMBO[STRING]`
|
|
- Python dtype: `bool`
|
|
- **`SSAA`**
|
|
- 超级采样抗锯齿因子,通过减少锯齿效应来提高绘图质量。
|
|
- Comfy dtype: `INT`
|
|
- Python dtype: `int`
|
|
- **`method`**
|
|
- 用于调整图像大小的方法,影响最终输出的质量。
|
|
- Comfy dtype: `COMBO[STRING]`
|
|
- Python dtype: `str`
|
|
|
|
# Output types
|
|
- **`image`**
|
|
- 带有绘制的圆角矩形的输出图像,展示了应用的自定义效果。
|
|
- Comfy dtype: `IMAGE`
|
|
- Python dtype: `numpy.ndarray`
|
|
|
|
|
|
## Usage tips
|
|
- Infra type: `GPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class ImageDrawRectangleRounded:
|
|
def __init__(self):
|
|
pass
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"width": ("INT", {
|
|
"default": 256,
|
|
"min": 1,
|
|
"step": 1
|
|
}),
|
|
"height": ("INT", {
|
|
"default": 256,
|
|
"min": 1,
|
|
"step": 1
|
|
}),
|
|
"start_x": ("FLOAT", {
|
|
"default": 0.1,
|
|
"max": 1.0,
|
|
"step": 0.01
|
|
}),
|
|
"start_y": ("FLOAT", {
|
|
"default": 0.2,
|
|
"max": 1.0,
|
|
"step": 0.01
|
|
}),
|
|
"end_x": ("FLOAT", {
|
|
"default": 0.9,
|
|
"max": 1.0,
|
|
"step": 0.01
|
|
}),
|
|
"end_y": ("FLOAT", {
|
|
"default": 0.8,
|
|
"max": 1.0,
|
|
"step": 0.01
|
|
}),
|
|
"radius": ("INT", {
|
|
"default": 180,
|
|
"max": 360,
|
|
"step": 1
|
|
}),
|
|
"outline_size": ("INT", {
|
|
"default": 1,
|
|
"step": 1
|
|
}),
|
|
"outline_red": ("INT", {
|
|
"default": 0,
|
|
"max": 255,
|
|
"step": 1
|
|
}),
|
|
"outline_green": ("INT", {
|
|
"default": 0,
|
|
"max": 255,
|
|
"step": 1
|
|
}),
|
|
"outline_blue": ("INT", {
|
|
"default": 0,
|
|
"max": 255,
|
|
"step": 1
|
|
}),
|
|
"outline_alpha": ("FLOAT", {
|
|
"default": 1.0,
|
|
"max": 1.0,
|
|
"step": 0.01
|
|
}),
|
|
"fill_red": ("INT", {
|
|
"default": 255,
|
|
"max": 255,
|
|
"step": 1
|
|
}),
|
|
"fill_green": ("INT", {
|
|
"default": 255,
|
|
"max": 255,
|
|
"step": 1
|
|
}),
|
|
"fill_blue": ("INT", {
|
|
"default": 255,
|
|
"max": 255,
|
|
"step": 1
|
|
}),
|
|
"fill_alpha": ("FLOAT", {
|
|
"default": 1.0,
|
|
"max": 1.0,
|
|
"step": 0.01
|
|
}),
|
|
"top_left_corner": (["true", "false"],),
|
|
"top_right_corner": (["true", "false"],),
|
|
"bottom_right_corner": (["true", "false"],),
|
|
"bottom_left_corner": (["true", "false"],),
|
|
"SSAA": ("INT", {
|
|
"default": 4,
|
|
"min": 1,
|
|
"max": 16,
|
|
"step": 1
|
|
}),
|
|
"method": (["lanczos", "bicubic", "hamming", "bilinear", "box", "nearest"],),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("IMAGE",)
|
|
FUNCTION = "node"
|
|
CATEGORY = "image/draw"
|
|
|
|
# noinspection PyPep8Naming, PyUnresolvedReferences, PyArgumentList
|
|
def node(
|
|
self,
|
|
width,
|
|
height,
|
|
start_x,
|
|
start_y,
|
|
end_x,
|
|
end_y,
|
|
radius,
|
|
outline_size,
|
|
outline_red,
|
|
outline_green,
|
|
outline_blue,
|
|
outline_alpha,
|
|
fill_red,
|
|
fill_green,
|
|
fill_blue,
|
|
fill_alpha,
|
|
top_left_corner,
|
|
top_right_corner,
|
|
bottom_right_corner,
|
|
bottom_left_corner,
|
|
SSAA,
|
|
method
|
|
):
|
|
canvas = Image.new("RGBA", (width * SSAA, height * SSAA), (0, 0, 0, 0))
|
|
|
|
draw = ImageDraw.Draw(canvas)
|
|
draw.rounded_rectangle(
|
|
(
|
|
(width * start_x * SSAA, height * start_y * SSAA),
|
|
(width * end_x * SSAA, height * end_y * SSAA)
|
|
),
|
|
radius * SSAA,
|
|
(fill_red, fill_green, fill_blue, int(fill_alpha * 255)),
|
|
(outline_red, outline_green, outline_blue, int(outline_alpha * 255)),
|
|
outline_size * SSAA,
|
|
corners=(
|
|
True if top_left_corner == "true" else False,
|
|
True if top_right_corner == "true" else False,
|
|
True if bottom_right_corner == "true" else False,
|
|
True if bottom_left_corner == "true" else False
|
|
)
|
|
)
|
|
|
|
canvas = canvas.resize((width, height), get_sampler_by_name(method))
|
|
|
|
return (canvas.image_to_tensor().unsqueeze(0),)
|
|
|
|
```
|