添加图片按条件缩放“最短边”
This commit is contained in:
+76
-1
@@ -3,7 +3,12 @@ import math
|
||||
from PIL import Image
|
||||
import numpy as np
|
||||
import torch
|
||||
import comfy.utils
|
||||
|
||||
def getImageSize(IMAGE) -> tuple[int, int]:
|
||||
samples = IMAGE.movedim(-1, 1)
|
||||
size = samples.shape[3], samples.shape[2]
|
||||
return size
|
||||
|
||||
def tensorToImg(imageTensor):
|
||||
imaget = imageTensor[0]
|
||||
@@ -241,7 +246,76 @@ class ImageNormalization:
|
||||
|
||||
return (nw, nh, top, left, bottom, right,)
|
||||
|
||||
class ImageScaleToSide:
|
||||
upscale_methods = ["nearest-exact", "bilinear", "area"]
|
||||
crop_methods = ["disabled", "center"]
|
||||
|
||||
def __init__(self) -> None:
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {
|
||||
"image": ("IMAGE",),
|
||||
"side_length": ("INT", {
|
||||
"default": 1,
|
||||
"min": 1,
|
||||
"max": 4096,
|
||||
"step": 1,
|
||||
"display": "number"
|
||||
}),
|
||||
"side": (["Longest", "Shortest", "Width", "Height"],),
|
||||
"upscale_method": (cls.upscale_methods,),
|
||||
"crop": (cls.crop_methods,)}}
|
||||
|
||||
RETURN_TYPES = ("IMAGE",)
|
||||
FUNCTION = "imageUpscaleToSide"
|
||||
|
||||
CATEGORY = "badger"
|
||||
|
||||
def imageUpscaleToSide(self, image, upscale_method, side_length: int, side: str, crop):
|
||||
samples = image.movedim(-1, 1)
|
||||
|
||||
size = getImageSize(image)
|
||||
|
||||
width_B = int(size[0])
|
||||
height_B = int(size[1])
|
||||
|
||||
width = width_B
|
||||
height = height_B
|
||||
|
||||
def determineSide(_side: str) -> tuple[int, int]:
|
||||
width, height = 0, 0
|
||||
if _side == "Width":
|
||||
heigh_ratio = height_B / width_B
|
||||
width = side_length
|
||||
height = heigh_ratio * width
|
||||
elif _side == "Height":
|
||||
width_ratio = width_B / height_B
|
||||
height = side_length
|
||||
width = width_ratio * height
|
||||
return width, height
|
||||
|
||||
if side == "Longest":
|
||||
if width > height:
|
||||
width, height = determineSide("Width")
|
||||
else:
|
||||
width, height = determineSide("Height")
|
||||
elif side == "Shortest":
|
||||
if width < height:
|
||||
width, height = determineSide("Width")
|
||||
else:
|
||||
width, height = determineSide("Height")
|
||||
else:
|
||||
width, height = determineSide(side)
|
||||
|
||||
width = math.ceil(width)
|
||||
height = math.ceil(height)
|
||||
|
||||
cls = comfy.utils.common_upscale(samples, width, height, upscale_method, crop)
|
||||
cls = cls.movedim(1, -1)
|
||||
return (cls,)
|
||||
|
||||
|
||||
|
||||
@@ -251,7 +325,8 @@ NODE_CLASS_MAPPINGS = {
|
||||
"FloatToInt-badger": FloatToInt,
|
||||
"IntToString-badger": IntToString,
|
||||
"FloatToString-badger": FloatToString,
|
||||
"ImageNormalization-badger": ImageNormalization
|
||||
"ImageNormalization-badger": ImageNormalization,
|
||||
"ImageScaleToSide-badger": ImageScaleToSide
|
||||
}
|
||||
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
|
||||
Reference in New Issue
Block a user