🦊画像のリサイズとクロップ
🏠 | 🦊雑に学ぶComfyUI
👈 |
👉 | 🦊色調補正・エフェクト
画像のサイズを大きくしたり正方形にクロップしたり…という単純なタスクですが、画像生成においてはとても重要な作業です
512px × 512pxで生成するのはなぜ?でも触れていますが、画像生成モデルは最も性能の発揮できる解像度がある程度決まっているのでそれに合わせる必要がありますし、うっかり4Kの画像をimage2imageしちゃった時はハローOut of memoryです。
また、動画編集などで、ある画像に合わせて他の画像の解像度も同じに揃えるといった場面が度々あります
出番の多い作業なので、違いをしっかり理解しましょう
画像のリサイズ
Upscale Imageノード
https://gyazo.com/ffb4198e8a30a7ae7c4d0add0c851966
Upscale Image.json
🟩指定した解像度にします
元の画像とアスペクト比が異なった場合、画像が歪んでしまいます
🟪cropをcenterにすると、画像を中心に配置したときにはみ出た部分をクロップ(切り抜き)します
Upscale Image Byノード
https://gyazo.com/adcb853e458db1583e11fbcb4a8b0f87
Upscale Image By.json
倍率でどれだけ拡大(縮小)するかを指定します
Scale Image to Total Pixelsノード
https://gyazo.com/e195b70965fc2e7dbf0511527516e527
Scale Image to Total Pixels.json
指定した総ピクセル数になるようにアスペクト比を保ったままリサイズします
1メガピクセル = 1024 × 1024 = 1,048,576ピクセル
cf. 計算方法 total = int(megapixels * 1024 * 1024)
とても大事なノードnomadoor.icon
512px × 512pxで生成するのはなぜ?の通り、モデル毎にうまく生成できる解像度が決まっています
SDXLなら1024 × 1024ですが、重要なのは総ピクセル数のため、正方形である必要はなく1600 × 640 でも良いわけです
他によく使う値
table:megapixels
目標サイズ 総ピクセル数 必要なメガピクセル値
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
画像のクロップ
ImageCropノード
https://gyazo.com/1c996b2fa8f7213f05c524b16468181e
ImageCrop.json
画像の一部分を矩形で切り抜きます
画像の回転
ImageRotateノード
https://gyazo.com/8de36981f39e9c39ec1b6c4aa3f9a7ff
ImageRotate.json
画像を90度/180度/270度で回転させます
画像の反転
ImageFlipノード
https://gyazo.com/e0661734e160f918d9fc9080dda91240
ImageFlip.json
画像を水平/垂直方向に反転させます
画像サイズの取得
https://gyazo.com/961e83cbf29cbf1f1ab583de4a9e1a00
Get_Image_Size.json
🟩Get Image Sizeノードで画像の幅・高さを取得できます
同様の機能を持つカスタムノードに🔧 Get Image Sizeノード(ComfyUI_essentials)やGet Image Size & CountノードComfyUI-KJNodesがあります
これらはサイズ以外に、バッチの値である"count"を出力してくれます
https://github.com/comfyanonymous/ComfyUI/commit/871749c20842dbdd7696ba77c78ee7d4c246ef6aネイティブのノードでバッチサイズも取得されるようになりました
🟪取得したサイズをそのままUpscale Image ノードに繋げば、他の画像を全く同じサイズにリサイズ・クロップできます
カスタムノードを使う
基本的には上記のノードのみで事足りますが、アスペクト比を保ったまま長辺を1024pxにする… のようなことをしようとすると、計算をしなければならなかったりして少々面倒です
それらの計算を内部で済ましてくれる便利なノードがあるので活用しましょう
🚨これ系の基本的な処理をするカスタムノードは無限に存在し、みんな好きなものを使っているため、人のworkflowを読み込むと大抵赤くなります
諦めましょう
https://github.com/cubiq/ComfyUI_essentialsComfyUI_essentials / 🔧 Image Resizeノード
method
https://gyazo.com/d6a2c85f093ac7c7124a370e234af310
🔧Image Resize_method.json
🟩stretch
Upscale Imageノードと同様の動作
🟪keep proportion
アスペクト比を保ったままリサイズします
辺が何pxになるかは次のconditionによります
🟨fill / crop
Upscale Imageノードでcropをcenterにしたときと同じ動作です
🟦pad
クロップとは逆に、できた隙間を黒で埋めます
余談ですが、🔧 Mask From Colorノード等で黒い部分をマスクとすることでoutpaintingに使えたりもします
condition
downscale if bigger
https://gyazo.com/e475c88426040b50de68709f173fff5b
🔧Image Resize_condition_downscale if bigger.json
画像が指定されたサイズより"大きい"場合に、画像を縮小します
downscale if bigger
画像のどちらかの辺が指定されたサイズより"小さい"場合に、画像を拡大します
if bigger area
画像の面積が指定されたサイズより"大きい"場合に、画像を縮小します
if smaller area
画像の面積が指定されたサイズより"小さい"場合に、画像を拡大します
multiple_of
画像の各辺を設定された数で割り切れる値に自動で変更します
e.g. width : 1000, multiple_of : 16 だった場合、出力される画像のwidthは 992 (16 * 62)になります
これにより余ってしまった部分はクロップされます
8や16の倍数でしか入力を受け付けないノードがいくつかあるので使用頻度は高いです
widthとheightを0にしておけば、この機能だけを使うこともできる
(Archive)🦊画像のリサイズとクロップ