2025-02-14-19:41:28

This commit is contained in:
Yanick112
2025-02-14 19:41:30 +08:00
parent 970301889c
commit 0918dfef07
4 changed files with 65 additions and 28 deletions
+4 -2
View File
@@ -4,14 +4,16 @@ NODE_CLASS_MAPPINGS = {
"ConvertRasterToVectorColor": ConvertRasterToVectorColor,
"ConvertRasterToVectorBW": ConvertRasterToVectorBW,
"ConvertVectorToRaster": ConvertVectorToRaster,
"SaveSVG": SaveSVG
"SaveSVG": SaveSVG,
"SVGPreview": SVGPreview,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"ConvertRasterToVectorColor": "Raster to Vector (SVG)Color",
"ConvertRasterToVectorBW": "Raster to Vector (SVG)BW",
"ConvertVectorToRaster": "Vector to Raster (SVG)",
"SaveSVG": "Save SVG"
"SaveSVG": "Save SVG",
"SVGPreview": "SVG Preview",
}
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']
Binary file not shown.
Binary file not shown.
+61 -26
View File
@@ -10,6 +10,14 @@ from io import BytesIO
import fitz
import numpy as np
import torch
import random
import folder_paths
from PIL import Image
from nodes import SaveImage
# Tensor to PIL
def tensor2pil(image):
return Image.fromarray(np.clip(255. * image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8))
@@ -37,7 +45,8 @@ class ConvertRasterToVectorColor:
}
}
RETURN_TYPES = ("LIST",)
RETURN_TYPES = ("STRING",)
OUTPUT_IS_LIST = (True,)
FUNCTION = "convert_to_svg"
CATEGORY = "💎TOSVG"
@@ -92,7 +101,8 @@ class ConvertRasterToVectorBW:
}
}
RETURN_TYPES = ("LIST",)
RETURN_TYPES = ("STRING",)
OUTPUT_IS_LIST = (True,)
FUNCTION = "convert_to_svg"
CATEGORY = "💎TOSVG"
@@ -133,7 +143,7 @@ class ConvertVectorToRaster:
def INPUT_TYPES(cls):
return {
"required": {
"svg_strings": ("LIST", {"forceInput": True})
"svg_strings": ("STRING", {"forceInput": True})
}
}
@@ -143,13 +153,12 @@ class ConvertVectorToRaster:
def convert_svg_to_image(self, svg_strings):
for svg_string in svg_strings:
doc = fitz.open(stream=svg_string.encode('utf-8'), filetype="svg")
page = doc.load_page(0)
pix = page.get_pixmap()
doc = fitz.open(stream=svg_strings.encode('utf-8'), filetype="svg")
page = doc.load_page(0)
pix = page.get_pixmap()
image_data = pix.tobytes("png")
pil_image = Image.open(BytesIO(image_data)).convert("RGB")
image_data = pix.tobytes("png")
pil_image = Image.open(BytesIO(image_data)).convert("RGB")
return (pil2tensor(pil_image),)
@@ -162,7 +171,7 @@ class SaveSVG:
def INPUT_TYPES(cls):
return {
"required": {
"svg_strings": ("LIST", {"forceInput": True}),
"svg_strings": ("STRING", {"forceInput": True}),
"filename_prefix": ("STRING", {"default": "ComfyUI_SVG"}),
},
"optional": {
@@ -173,7 +182,6 @@ class SaveSVG:
CATEGORY = "💎TOSVG"
DESCRIPTION = "Save SVG data to a file."
RETURN_TYPES = ()
OUTPUT_NODE = True
FUNCTION = "save_svg_file"
@@ -190,21 +198,48 @@ class SaveSVG:
output_path = custom_output_path if custom_output_path else self.output_dir
os.makedirs(output_path, exist_ok=True)
ui_info_list = []
unique_filename = self.generate_unique_filename(f"{filename_prefix}", append_timestamp)
final_filepath = os.path.join(output_path, unique_filename)
with open(final_filepath, "w") as svg_file:
svg_file.write(svg_strings)
ui_info = {"ui": {"saved_svg": unique_filename, "path": final_filepath}}
for index, svg_string in enumerate(svg_strings):
unique_filename = self.generate_unique_filename(f"{filename_prefix}_{index}", append_timestamp)
final_filepath = os.path.join(output_path, unique_filename)
with open(final_filepath, "w") as svg_file:
svg_file.write(svg_string)
ui_info = {"ui": {"saved_svg": unique_filename, "path": final_filepath}}
ui_info_list.append(ui_info)
return ui_info_list
return ui_info
class SVGPreview(SaveImage):
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"svg_strings": ("STRING", {"forceInput": True})
}
}
FUNCTION = "svg_preview"
CATEGORY = "💎TOSVG"
OUTPUT_NODE = True
def __init__(self):
self.output_dir = folder_paths.get_temp_directory()
self.type = "temp"
self.prefix_append = "_temp_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz1234567890") for x in range(5))
self.compress_level = 4
def svg_preview(self, svg_strings):
doc = fitz.open(stream=svg_strings.encode('utf-8'), filetype="svg")
page = doc.load_page(0)
pix = page.get_pixmap()
image_data = pix.tobytes("png")
pil_image = Image.open(BytesIO(image_data)).convert("RGB")
preview = pil2tensor(pil_image)
return self.save_images(preview, "PointPreview")