184 lines
6.2 KiB
Markdown
184 lines
6.2 KiB
Markdown
|
|
# Documentation
|
|
- Class name: ImageTextMultilineOutlined
|
|
- Category: image/draw
|
|
- Output node: False
|
|
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
|
|
|
|
ImageTextMultilineOutlined节点专门用于创建支持多行文本和轮廓文字的图像。它允许对文本外观进行详细自定义,包括字体选择、对齐方式、大小、颜色和轮廓属性,以及文本在图像中的位置。
|
|
|
|
# Input types
|
|
## Required
|
|
- text
|
|
- 文本参数允许输入要在图像上渲染的多行文本。它支持包含换行符以将文本分成多行,从而可以创建文本块或段落。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
- font
|
|
- 字体参数指定用于文本的字体样式。它从可用字体列表中选择,允许对文本外观进行美学定制。
|
|
- Comfy dtype: COMBO[STRING]
|
|
- Python dtype: str
|
|
- align
|
|
- 对齐参数决定了文本在图像中的水平对齐方式。它支持"左对齐"、"居中"和"右对齐"等选项,使文本能够根据设计要求进行定位。
|
|
- Comfy dtype: COMBO[STRING]
|
|
- Python dtype: str
|
|
- size
|
|
- 大小参数控制文本的字体大小,允许调整文本在图像中的视觉突出度和可读性。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- red
|
|
- 红色参数指定文本颜色的红色分量,能够自定义文本的颜色外观。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- green
|
|
- 绿色参数指定文本颜色的绿色分量,有助于自定义文本的整体颜色。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- blue
|
|
- 蓝色参数指定文本颜色的蓝色分量,允许微调文本的视觉颜色。
|
|
- 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
|
|
- alpha
|
|
- alpha参数控制文本的不透明度,使文本能够以不同的透明度级别进行渲染。
|
|
- Comfy dtype: FLOAT
|
|
- Python dtype: float
|
|
- margin_x
|
|
- margin_x参数指定文本周围的水平边距,影响文本相对于图像边缘的定位。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- margin_y
|
|
- margin_y参数指定文本周围的垂直边距,影响文本在图像中的垂直间距和定位。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
|
|
# Output types
|
|
- image
|
|
- 图像输出类型表示生成的带有渲染文本的图像,包括任何指定的轮廓和自定义设置。
|
|
- Comfy dtype: IMAGE
|
|
- Python dtype: torch.Tensor
|
|
|
|
|
|
## Usage tips
|
|
- Infra type: `CPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class ImageTextMultilineOutlined:
|
|
def __init__(self):
|
|
pass
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"text": ("STRING", {"multiline": True}),
|
|
"font": (folder_paths.get_filename_list("fonts"),),
|
|
"align": (["left", "center", "right"],),
|
|
"size": ("INT", {
|
|
"default": 28,
|
|
"min": 1,
|
|
"step": 1
|
|
}),
|
|
"red": ("INT", {
|
|
"default": 255,
|
|
"max": 255,
|
|
"step": 1
|
|
}),
|
|
"green": ("INT", {
|
|
"default": 255,
|
|
"max": 255,
|
|
"step": 1
|
|
}),
|
|
"blue": ("INT", {
|
|
"default": 255,
|
|
"max": 255,
|
|
"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
|
|
}),
|
|
"alpha": ("FLOAT", {
|
|
"default": 1.0,
|
|
"max": 1.0,
|
|
"step": 0.01
|
|
}),
|
|
"margin_x": ("INT", {
|
|
"default": 0,
|
|
"step": 1
|
|
}),
|
|
"margin_y": ("INT", {
|
|
"default": 0,
|
|
"step": 1
|
|
}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("IMAGE",)
|
|
FUNCTION = "node"
|
|
CATEGORY = "image/draw"
|
|
|
|
def node(
|
|
self, text, font, align, size, red, green, blue, outline_size, outline_red, outline_green, outline_blue,
|
|
alpha, margin_x, margin_y
|
|
):
|
|
font_path = folder_paths.get_full_path("fonts", font)
|
|
font = ImageFont.truetype(font_path, size, encoding="unic")
|
|
|
|
lines = text.split('\n').__len__()
|
|
(_, top, _, _) = font.getbbox(text)
|
|
|
|
canvas = Image.new("RGBA", (0, 0))
|
|
draw = ImageDraw.Draw(canvas)
|
|
text_size = draw.multiline_textbbox((0, 0), text, font)
|
|
|
|
canvas = Image.new("RGBA", (
|
|
text_size[2] + (margin_x + outline_size) * 2,
|
|
text_size[3] - top + (margin_y + (outline_size * lines)) * 2
|
|
), (0, 0, 0, 0))
|
|
|
|
draw = ImageDraw.Draw(canvas)
|
|
|
|
draw.text(
|
|
(margin_x + outline_size, margin_y + outline_size - top),
|
|
text=text, fill=(red, green, blue, int(alpha * 255)),
|
|
stroke_fill=(outline_red, outline_green, outline_blue, int(alpha * 255)),
|
|
stroke_width=outline_size, font=font, align=align
|
|
)
|
|
|
|
return (canvas.image_to_tensor().unsqueeze(0),)
|
|
|
|
```
|