画像のリサイズとクロップ

画像のサイズを大きくしたり正方形にクロップ(切り抜き)したり…という単純なタスクですが、画像生成においてはとても重要な作業です。

  • モデルの適正解像度: モデルには「最も性能を発揮できる解像度」があります。
  • VRAMの節約: うっかり4Kの画像を読み込んで処理すると、一瞬で「Out of memory」になります。
  • 素材の統一: 画像合成などで、複数の素材サイズを揃える必要があります。

出番の多い作業なので、それぞれのノードの違いをしっかり理解しましょう。


画像情報の取得

Get Image Size ノード

画像の幅(width)と高さ(height)、バッチサイズ(枚数)を数値として出力します。

Get_Image_Size.json

リサイズ

Resize Image/Mask ノード

いくつものリサイズ方法を切り替えて使えるノードです。
基本的には、これ一つで必要な処理をだいたい網羅できます。(ちなみにマスクもリサイズできます)

scale by multiplier

縦横を「倍率」で拡大・縮小します。

たとえば 0.5 なら縦横が半分、2.0 なら縦横が2倍です。

scale dimensions

指定した幅・高さの解像度に強制的に変更します。

  • crop
    • disabled : アスペクト比が違う場合は歪みます。
    • center : 中心を維持してはみ出た部分をクロップ(切り捨て)します。

scale longer/shorter dimension

長辺(longer)または短辺(shorter)だけを指定し、アスペクト比を保ったままリサイズします。

scale width/height

幅または高さのどちらか一方だけを指定し、アスペクト比を保ったままリサイズします。

scale total pixels

指定した 総ピクセル数(画素数) になるように、アスペクト比を保ったままリサイズします。

1024 * 1024 = 1.00MPとして計算されます。

目標サイズ 総ピクセル数 設定値
512 × 512 262,144 0.25
768 × 768 589,824 0.56
1024 × 1024 1,048,576 1.00
1536 × 1536 2,359,296 2.25

match size

参照画像と同じサイズになるようにリサイズします。

以前は参照画像のサイズを取得して、それを別ノードへ渡す必要がありましたが、これで一つにまとまります。

  • match: 基準にしたい画像を接続
  • crop
    • disabled : アスペクト比が違う場合は歪みます。
    • center: 中心を維持してはみ出た部分をクロップ(切り捨て)します。

scale to multiple

縦横を N の倍数 になるようにリサイズします。

詳しくは 8の倍数の解像度しか生成できないのはなぜ? で解説しますが、拡散モデルは VAEの都合で、特定の倍数になっていない解像度をそのまま扱えません。

基本的にはどこかのノードで自動調整されることも多いのですが、指定解像度でないとエラーが出るケースや、入力と出力でピクセルを「完全一致」させたいケースで使うことがあります。

ImageScaleToMaxDimension ノード

画像の長辺が設定したサイズになるように、アスペクト比を保ったままリサイズします。
(例:縦長の画像でも横長の画像でも、長い方が1024pxになるようにする)

ImageScaleToMaxDimension.json

パディング

パディングとは、画像の周囲に余白(黒帯など)を追加して、サイズを調整する処理のことです。
ノードによっては、この余白部分をマスクとして出力できるため、Outpaintingを行う際の下準備として使われます。

ResizeAndPadImage ノード

指定した解像度に合わせてリサイズし、足りない部分をパディングで埋めます。

ResizeAndPadImage.json

このノードはパディング部分をマスクとして出力できないため、ほとんど使う場面はありません。

Pad Image for Outpainting ノード

画像の上下左右に、指定したピクセル数だけ余白を追加します。

Pad_Image_for_Outpainting.json

余白部分がマスクとして出力されます。

  • feathering: 余白と画像の境界をぼかします。マスクにしか影響しません。

クロップその他の編集操作

ImageCrop ノード

x, y座標と幅・高さを指定して、画像の一部分を矩形で切り抜きます。

ImageCrop.json

ImageRotate ノード

画像を90度 / 180度 / 270度 回転させます。

ImageRotate.json

ImageFlip ノード

画像を水平 / 垂直方向に反転させます。

ImageFlip.json

Resize Image v2 ノード

これは kijai/ComfyUI-KJNodes に含まれるノードです。

上記のリサイズ・クロップ・パディングが一つにまとめられたようなノードです。

パラメータ名 説明
width / height 目標とする幅と高さ(0なら変更なし)
upscale_method リサイズ時の補間方法(nearest, bilinearなど)
keep_proportion stretch, pad, crop, etc.
pad_color パディング時の色(RGB)
crop_position center, top, bottom, left, right
divisible_by この値の倍数の解像度にリサイズされます(例:32, 64)

以前は、縦横を N の倍数 になるようにリサイズする用途で多用していましたが、現在はコアノードで対応できるため、あまり使用していません。


少し応用

これまでのノードを組み合わせて、少し複雑な画像加工をしてみましょう。

画像を半分にクロップ

Crop_to_half_size.json
  • 画像のサイズを取得
  • Simple math ノードで幅の半分の長さを計算
  • ImageCrop ノードに計算した幅を入力し、半分にクロップ