🦊画像のリサイズとクロップ
👈 |
画像のサイズを大きくしたり正方形にクロップしたり…という単純なタスクですが、画像生成においてはとても重要な作業です
512px × 512pxで生成するのはなぜ?でも触れていますが、画像生成モデルは最も性能の発揮できる解像度がある程度決まっているのでそれに合わせる必要がありますし、うっかり4Kの画像をimage2imageしちゃった時はハローOut of memoryです。 また、動画編集などで、ある画像に合わせて他の画像の解像度も同じに揃えるといった場面が度々あります
出番の多い作業なので、違いをしっかり理解しましょう
画像のリサイズ
https://gyazo.com/ffb4198e8a30a7ae7c4d0add0c851966
🟩指定した解像度にします
元の画像とアスペクト比が異なった場合、画像が歪んでしまいます
🟪cropをcenterにすると、画像を中心に配置したときにはみ出た部分をクロップ(切り抜き)します
https://gyazo.com/adcb853e458db1583e11fbcb4a8b0f87
倍率でどれだけ拡大(縮小)するかを指定します
https://gyazo.com/e195b70965fc2e7dbf0511527516e527
指定した総ピクセル数になるようにアスペクト比を保ったままリサイズします
1メガピクセル = 1024 × 1024 = 1,048,576ピクセル
cf. 計算方法 total = int(megapixels * 1024 * 1024)
とても大事なノードnomadoor.icon
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
画像のクロップ
https://gyazo.com/1c996b2fa8f7213f05c524b16468181e
画像の一部分を矩形で切り抜きます
画像の回転
https://gyazo.com/8de36981f39e9c39ec1b6c4aa3f9a7ff
画像を90度/180度/270度で回転させます
画像の反転
https://gyazo.com/e0661734e160f918d9fc9080dda91240
画像を水平/垂直方向に反転させます
画像サイズの取得
https://gyazo.com/961e83cbf29cbf1f1ab583de4a9e1a00
これらはサイズ以外に、バッチの値である"count"を出力してくれます
🟪取得したサイズをそのままUpscale Image ノードに繋げば、他の画像を全く同じサイズにリサイズ・クロップできます
カスタムノードを使う
基本的には上記のノードのみで事足りますが、アスペクト比を保ったまま長辺を1024pxにする… のようなことをしようとすると、計算をしなければならなかったりして少々面倒です
それらの計算を内部で済ましてくれる便利なノードがあるので活用しましょう
🚨これ系の基本的な処理をするカスタムノードは無限に存在し、みんな好きなものを使っているため、人のworkflowを読み込むと大抵赤くなります
諦めましょう
method
https://gyazo.com/d6a2c85f093ac7c7124a370e234af310
🟩stretch
🟪keep proportion
アスペクト比を保ったままリサイズします
辺が何pxになるかは次のconditionによります
🟨fill / crop
🟦pad
クロップとは逆に、できた隙間を黒で埋めます
condition
downscale if bigger
https://gyazo.com/e475c88426040b50de68709f173fff5b
画像が指定されたサイズより"大きい"場合に、画像を縮小します
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にしておけば、この機能だけを使うこともできる