mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-05-12 10:12:35 +08:00
Composite images of different sizes
resample option is used when scaling mask
This commit is contained in:
parent
46d0fa6424
commit
a20163eb84
@ -266,11 +266,7 @@ class Rotate:
|
|||||||
"max": 360,
|
"max": 360,
|
||||||
"step": 0.1
|
"step": 0.1
|
||||||
}),
|
}),
|
||||||
"resample": ([
|
"resample": (["nearest neighbor", "bilinear", "bicubic"],),
|
||||||
"Nearest Neighbor",
|
|
||||||
"Bilinear",
|
|
||||||
"Bicubic",
|
|
||||||
],),
|
|
||||||
"expand": (["disabled", "enabled"],),
|
"expand": (["disabled", "enabled"],),
|
||||||
"center_x": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION}),
|
"center_x": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION}),
|
||||||
"center_y": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION}),
|
"center_y": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION}),
|
||||||
@ -290,9 +286,9 @@ class Rotate:
|
|||||||
batch_size, height, width, _ = image.shape
|
batch_size, height, width, _ = image.shape
|
||||||
|
|
||||||
resamplers = {
|
resamplers = {
|
||||||
"Nearest Neighbor": Image.Resampling.NEAREST,
|
"nearest neighbor": Image.Resampling.NEAREST,
|
||||||
"Bilinear": Image.Resampling.BILINEAR,
|
"bilinear": Image.Resampling.BILINEAR,
|
||||||
"Bicubic": Image.Resampling.BICUBIC,
|
"bicubic": Image.Resampling.BICUBIC,
|
||||||
}
|
}
|
||||||
|
|
||||||
tensor_image = image[0]
|
tensor_image = image[0]
|
||||||
@ -430,6 +426,7 @@ class Composite:
|
|||||||
"image_b": ("IMAGE",),
|
"image_b": ("IMAGE",),
|
||||||
"x": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION}),
|
"x": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION}),
|
||||||
"y": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION}),
|
"y": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION}),
|
||||||
|
"resample": (["nearest neighbor", "box", "bilinear", "bicubic", "hamming", "lanczos"],),
|
||||||
},
|
},
|
||||||
"optional": {
|
"optional": {
|
||||||
"mask": ("MASK",),
|
"mask": ("MASK",),
|
||||||
@ -441,7 +438,16 @@ class Composite:
|
|||||||
|
|
||||||
CATEGORY = "image/postprocessing"
|
CATEGORY = "image/postprocessing"
|
||||||
|
|
||||||
def composite(self, image_a: torch.Tensor, image_b: torch.Tensor, x: int, y: int, mask: torch.Tensor = None):
|
def composite(self, image_a: torch.Tensor, image_b: torch.Tensor, x: int, y: int, resample: str, mask: torch.Tensor = None):
|
||||||
|
resamplers = {
|
||||||
|
"nearest neighbor": Image.Resampling.NEAREST,
|
||||||
|
"bilinear": Image.Resampling.BILINEAR,
|
||||||
|
"bicubic": Image.Resampling.BICUBIC,
|
||||||
|
"box": Image.Resampling.BOX,
|
||||||
|
"hamming": Image.Resampling.HAMMING,
|
||||||
|
"lanczos": Image.Resampling.LANCZOS,
|
||||||
|
}
|
||||||
|
|
||||||
batch_size, height, width, _ = image_a.shape
|
batch_size, height, width, _ = image_a.shape
|
||||||
result = torch.zeros_like(image_a)
|
result = torch.zeros_like(image_a)
|
||||||
|
|
||||||
@ -455,6 +461,8 @@ class Composite:
|
|||||||
pil_image_a = Image.fromarray(img_a, mode='RGB')
|
pil_image_a = Image.fromarray(img_a, mode='RGB')
|
||||||
pil_image_b = Image.fromarray(img_b, mode='RGB')
|
pil_image_b = Image.fromarray(img_b, mode='RGB')
|
||||||
pil_image_mask = Image.fromarray(img_mask, mode='L')
|
pil_image_mask = Image.fromarray(img_mask, mode='L')
|
||||||
|
if pil_image_mask.size != pil_image_b.size:
|
||||||
|
pil_image_mask = pil_image_mask.resize(pil_image_b.size, resamplers[resample])
|
||||||
|
|
||||||
pil_image_a.paste(pil_image_b, (x, y), pil_image_mask)
|
pil_image_a.paste(pil_image_b, (x, y), pil_image_mask)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user