Implement CalculateImagePadding node for dynamic image padding based on aspect ratio and update version to 1.0.1

This commit is contained in:
sugarkwork
2025-02-08 00:21:37 +09:00
parent e62194020b
commit 9a8971ee35
2 changed files with 62 additions and 3 deletions
+61 -2
View File
@@ -1,3 +1,4 @@
import torch
from typing import Tuple
class ResolutionSize:
@@ -86,14 +87,72 @@ class AspectRatioToSize:
return (resolution_size,)
class CalculateImagePadding:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"image": ("IMAGE", ),
"aspect_ratio": ("STRING", {"default": "16:9"}),
}
}
RETURN_NAMES = ("left", "right", "top", "bottom")
RETURN_TYPES = ("INT","INT","INT","INT")
FUNCTION = "calculate_image_padding"
OUTPUT_NODE = True
CATEGORY = "image"
def calculate_image_padding(self, image: torch.Tensor, aspect_ratio:str) -> Tuple[int, int, int, int]:
aspect_ratio = aspect_ratio.split(":")
width_ratio = max(0, float(aspect_ratio[0]))
height_ratio = max(0, float(aspect_ratio[1]))
# Calculate the target aspect ratio
target_ratio = width_ratio / height_ratio
# Get image dimensions (assuming channel-first format: [C, H, W])
height = image.shape[1]
width = image.shape[2]
# Calculate current aspect ratio
current_ratio = width / height
if current_ratio == target_ratio:
# If aspect ratio matches, no padding is required
return (0, 0, 0, 0)
elif current_ratio > target_ratio:
# Width is too large, add padding to the height (top and bottom)
new_height = int(width / target_ratio)
total_padding = new_height - height
padding_top = total_padding // 2
padding_bottom = total_padding - padding_top
return (0, 0, padding_top, padding_bottom)
else:
# Height is too large, add padding to the width (left and right)
new_width = int(height * target_ratio)
total_padding = new_width - width
padding_left = total_padding // 2
padding_right = total_padding - padding_left
return (padding_left, padding_right, 0, 0)
NODE_CLASS_MAPPINGS = {
"AspectRatioToSize": AspectRatioToSize,
"SizeToWidthHeight": SizeToWidthHeight
"SizeToWidthHeight": SizeToWidthHeight,
"CalculateImagePadding": CalculateImagePadding
}
NODE_DISPLAY_NAME_MAPPINGS = {
"AspectRatioToSize": "AspectRatioToSize",
"SizeToWidthHeight": "SizeToWidthHeight"
"SizeToWidthHeight": "SizeToWidthHeight",
"CalculateImagePadding": "CalculateImagePadding"
}
+1 -1
View File
@@ -1,7 +1,7 @@
[project]
name = "ComfyUI_AspectRatioToSize"
description = "A ComfyUI custom node that calculates width and height while maintaining aspect ratio, making it easier to determine image resolutions with specified aspect ratios and longer side values."
version = "1.0.0"
version = "1.0.1"
license = { file = "LICENSE" }
dependencies = []