3.7 KiB
3.7 KiB
tags
| tags | |||
|---|---|---|---|
|
🔧 Image Crop
Documentation
- Class name:
ImageCrop+ - Category:
essentials - Output node:
False
The ImageCrop+ node is designed for cropping images to specified dimensions and coordinates, allowing for precise control over the portion of the image to be retained or discarded.
Input types
Required
image- The image to be cropped, serving as the primary input for the cropping operation.
- Comfy dtype:
IMAGE - Python dtype:
torch.Tensor
width- Specifies the width of the cropped image area.
- Comfy dtype:
INT - Python dtype:
int
height- Specifies the height of the cropped image area.
- Comfy dtype:
INT - Python dtype:
int
position- unknown
- Comfy dtype:
COMBO[STRING] - Python dtype:
unknown
x_offset- unknown
- Comfy dtype:
INT - Python dtype:
unknown
y_offset- unknown
- Comfy dtype:
INT - Python dtype:
unknown
Output types
IMAGE- Comfy dtype:
IMAGE - The cropped portion of the input image.
- Python dtype:
torch.Tensor
- Comfy dtype:
x- Comfy dtype:
INT - The x-coordinate of the top-left corner of the resulting cropped area, reflecting any adjustments made during the cropping process.
- Python dtype:
int
- Comfy dtype:
y- Comfy dtype:
INT - The y-coordinate of the top-left corner of the resulting cropped area, reflecting any adjustments made during the cropping process.
- Python dtype:
int
- Comfy dtype:
Usage tips
- Infra type:
CPU - Common nodes:
- PreviewImage
- ImageSharpen
- SetNode
- IPAdapterApply
- Reroute
- DWPreprocessor
- LineArtPreprocessor
- MiDaS-DepthMapPreprocessor
- IPAdapterApplyFaceID
Source code
class ImageCrop:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"image": ("IMAGE",),
"width": ("INT", { "default": 256, "min": 0, "max": MAX_RESOLUTION, "step": 8, }),
"height": ("INT", { "default": 256, "min": 0, "max": MAX_RESOLUTION, "step": 8, }),
"position": (["top-left", "top-center", "top-right", "right-center", "bottom-right", "bottom-center", "bottom-left", "left-center", "center"],),
"x_offset": ("INT", { "default": 0, "min": -99999, "step": 1, }),
"y_offset": ("INT", { "default": 0, "min": -99999, "step": 1, }),
}
}
RETURN_TYPES = ("IMAGE","INT","INT",)
RETURN_NAMES = ("IMAGE","x","y",)
FUNCTION = "execute"
CATEGORY = "essentials"
def execute(self, image, width, height, position, x_offset, y_offset):
_, oh, ow, _ = image.shape
width = min(ow, width)
height = min(oh, height)
if "center" in position:
x = round((ow-width) / 2)
y = round((oh-height) / 2)
if "top" in position:
y = 0
if "bottom" in position:
y = oh-height
if "left" in position:
x = 0
if "right" in position:
x = ow-width
x += x_offset
y += y_offset
x2 = x+width
y2 = y+height
if x2 > ow:
x2 = ow
if x < 0:
x = 0
if y2 > oh:
y2 = oh
if y < 0:
y = 0
image = image[:, y:y2, x:x2, :]
return(image, x, y, )