2023/07/13(木) [n年前の日記]
#1 [gimp] GIMPでレイヤーの自動位置合わせをしてみたかった
無料で利用できる画像編集ソフト、GIMP 2.10.x 上で、レイヤーの位置合わせを自動で行いたいなと。
どういうことをしたいかと言うと…。例えば以下のように、内容が似ているけど位置がちょっとずれてる2枚のレイヤーがあるとして。
片方のレイヤーを移動させて、位置合わせをしたい。
こういう作業を楽にしてくれるプラグイン、もしくはスクリプトがどこかにないか。
ググってみたら、この日記にメモしてあった…。
_mieki256's diary - GIMPのレイヤーを自動で位置合わせ
ただ、当時、具体的にどんな操作をすればいいのかメモしてなかったので、自分で書いたソレなのに何が何やらさっぱりで…。
更に、どのプラグイン/スクリプトも、かつて存在していた GIMP Plugin Registry というサイトで公開されていたのだけど、件のサイトは今現在消滅しているわけで…。
_GIMP - Registry
そんなわけで、各プラグイン/スクリプトの現在の入手先を探して、かつ、操作の仕方を把握し直してメモしてみることにした。
環境は、Windows10 x64 22H2 + GIMP 2.10.34 Portable。
どういうことをしたいかと言うと…。例えば以下のように、内容が似ているけど位置がちょっとずれてる2枚のレイヤーがあるとして。
片方のレイヤーを移動させて、位置合わせをしたい。
こういう作業を楽にしてくれるプラグイン、もしくはスクリプトがどこかにないか。
ググってみたら、この日記にメモしてあった…。
_mieki256's diary - GIMPのレイヤーを自動で位置合わせ
ただ、当時、具体的にどんな操作をすればいいのかメモしてなかったので、自分で書いたソレなのに何が何やらさっぱりで…。
更に、どのプラグイン/スクリプトも、かつて存在していた GIMP Plugin Registry というサイトで公開されていたのだけど、件のサイトは今現在消滅しているわけで…。
_GIMP - Registry
そんなわけで、各プラグイン/スクリプトの現在の入手先を探して、かつ、操作の仕方を把握し直してメモしてみることにした。
環境は、Windows10 x64 22H2 + GIMP 2.10.34 Portable。
◎ GIMP Plugin Registryのバックアップについて :
GIMP Plugin Registry は、github にバックアップが残してあるらしい。
_GitHub - pixlsus/registry.gimp.org_static: A wget backup of http://registry.gimp.org
_registry.gimp.org_static/registry.gimp.org/files at master - pixlsus/registry.gimp.org_static - GitHub
欲しいスクリプトのファイル名さえ分かれば、まだ入手できる可能性はありそうだなと…。
_GitHub - pixlsus/registry.gimp.org_static: A wget backup of http://registry.gimp.org
_registry.gimp.org_static/registry.gimp.org/files at master - pixlsus/registry.gimp.org_static - GitHub
欲しいスクリプトのファイル名さえ分かれば、まだ入手できる可能性はありそうだなと…。
◎ Gimp Plug-in for Image Registration について :
Gimp Plug-in for Image Registration を使うと、そこそこ自動でレイヤーの位置合わせをしてくれる。このプラグインについては公式ページに辿り着けた。
_Gimp Plug-in for Image Registration: Welcome!
_Gimp Plug-in for Image Registration: Examples
_Gimp Plug-in for Image Registration download | SourceForge.net
_Gimp Plug-in for Image Registration - Browse /version-2.0.1 at SourceForge.net
SourceForge.net から 2.0.1 が入手できる模様。今回は gimp-image-reg-2.0.1-windows.zip を入手。解凍すると、gimp-image-reg.py と imregフォルダが入っているので、GIMPユーザーフォルダ/plug-ins/ にコピーすればインストールできる。
ちなみに、0.5.5 の頃は、gimp-image-reg.exe という実行バイナリの形で提供されていた。2.0.x から、Python-Fu (GIMP-Python) で書き直したようだなと…。
インストールすると、GIMPのメニューバーの「ツール」に「Image Registration...」という項目が増える。
使い方は以下。例えば、以下のような状態の2枚のレイヤーがあるとして、上のレイヤーを移動して位置合わせしたい。上のレイヤーを選択してアクティブにしておく。
ツール → Image Registration を選択。
設定ダイアログが開くので、Reference Image として、参照するレイヤー(下のレイヤー)を選んで、OKをクリック。
アクティブだったレイヤーが移動して、位置合わせができた。
ただ、どちらのレイヤーもそれなりに近い位置にないと正しく処理されないようにも見えた。縦方向は位置合わせしてくれたけど、横方向はずれたままになる場面もあって…。あらかじめ、ざっくりでいいから、目視で大まかにレイヤー位置を合わせておく必要がありそう。
前述の設定ダイアログを眺めると、移動+回転ではなくアフィン変換を使ったり、画素の補間アルゴリズムも色々選べるようだなと…。
_Gimp Plug-in for Image Registration: Welcome!
_Gimp Plug-in for Image Registration: Examples
_Gimp Plug-in for Image Registration download | SourceForge.net
_Gimp Plug-in for Image Registration - Browse /version-2.0.1 at SourceForge.net
SourceForge.net から 2.0.1 が入手できる模様。今回は gimp-image-reg-2.0.1-windows.zip を入手。解凍すると、gimp-image-reg.py と imregフォルダが入っているので、GIMPユーザーフォルダ/plug-ins/ にコピーすればインストールできる。
ちなみに、0.5.5 の頃は、gimp-image-reg.exe という実行バイナリの形で提供されていた。2.0.x から、Python-Fu (GIMP-Python) で書き直したようだなと…。
インストールすると、GIMPのメニューバーの「ツール」に「Image Registration...」という項目が増える。
使い方は以下。例えば、以下のような状態の2枚のレイヤーがあるとして、上のレイヤーを移動して位置合わせしたい。上のレイヤーを選択してアクティブにしておく。
ツール → Image Registration を選択。
設定ダイアログが開くので、Reference Image として、参照するレイヤー(下のレイヤー)を選んで、OKをクリック。
アクティブだったレイヤーが移動して、位置合わせができた。
ただ、どちらのレイヤーもそれなりに近い位置にないと正しく処理されないようにも見えた。縦方向は位置合わせしてくれたけど、横方向はずれたままになる場面もあって…。あらかじめ、ざっくりでいいから、目視で大まかにレイヤー位置を合わせておく必要がありそう。
前述の設定ダイアログを眺めると、移動+回転ではなくアフィン変換を使ったり、画素の補間アルゴリズムも色々選べるようだなと…。
◎ exact-aligner.scm について :
自動で位置合わせするわけではないけれど、GIMPのパスツールを利用して、移動先と移動元の位置を指定してやることで、比較的簡単にレイヤーの位置合わせをしてくれる、exact-aligner.scm という Script-Fu もある。github の GIMP Plugin Registry のバックアップから入手することができる。
_exact-aligner.scm at master - pixlsus/registry.gimp.org_static - GitHub
_Exact Align via 4-Point Path - GIMP Chat
ただ、このスクリプトは古いので、もしかするとGIMPのメニューに出てこないかもしれない…。メニュー位置だけを、Script-Fu → Tries-Tools → Exact Aligner に変えた版も一応置いておく。
_exact-aligner.scm
変更点は以下。
インストールの仕方は、該当ファイルを、GIMPユーザフォルダ/scripts/ 以下にコピーすればいい。
使い方は以下。GIMPのパスツールを選んで…。
マウスで左クリックして、4つの点を指定。1番目の点の位置に3番目の点が、2番目の点の位置に4番目の点が移動する感じで…。最初に移動先の2点を打つ、みたいな。
Script-Fu → Tries-Tools → Exact Aligner、を選択。
アクティブレイヤーの位置が変更されて、位置合わせができた。
おそらくだけど、このスクリプトは、移動、回転、拡大縮小をして、位置合わせをしているような気がする…。例えば以下のように、移動+回転+拡大縮小をしたレイヤーに対して処理しても、それらしく位置合わせしてくれるので…。
逆に言うと、単に移動だけしたい場合でも、回転や拡大縮小がかかってしまって、レイヤー内の画像が荒れてしまう可能性もありそうだなと…。
_exact-aligner.scm at master - pixlsus/registry.gimp.org_static - GitHub
_Exact Align via 4-Point Path - GIMP Chat
ただ、このスクリプトは古いので、もしかするとGIMPのメニューに出てこないかもしれない…。メニュー位置だけを、Script-Fu → Tries-Tools → Exact Aligner に変えた版も一応置いておく。
_exact-aligner.scm
変更点は以下。
--- exact-aligner.orig.scm Thu Jul 13 06:08:24 2023 +++ exact-aligner.scm Sat Jul 5 15:36:07 2014 @@ -146,7 +146,8 @@ ;Now we want to register this stuff... (script-fu-register "script-fu-exact-overlay" - _"<Image>/Tries-Tools/Exact Aligner" + ;; _"<Image>/Tries-Tools/Exact Aligner" + _"<Image>/Script-Fu/Tries-Tools/Exact Aligner" "Exact projection of 2 images in 2 layers" "Dr. Volker Tries" "(c) 2009, Dr. Volker Tries - Volker.Tries@kfopraxis-oberursel.de"
インストールの仕方は、該当ファイルを、GIMPユーザフォルダ/scripts/ 以下にコピーすればいい。
使い方は以下。GIMPのパスツールを選んで…。
マウスで左クリックして、4つの点を指定。1番目の点の位置に3番目の点が、2番目の点の位置に4番目の点が移動する感じで…。最初に移動先の2点を打つ、みたいな。
Script-Fu → Tries-Tools → Exact Aligner、を選択。
アクティブレイヤーの位置が変更されて、位置合わせができた。
おそらくだけど、このスクリプトは、移動、回転、拡大縮小をして、位置合わせをしているような気がする…。例えば以下のように、移動+回転+拡大縮小をしたレイヤーに対して処理しても、それらしく位置合わせしてくれるので…。
逆に言うと、単に移動だけしたい場合でも、回転や拡大縮小がかかってしまって、レイヤー内の画像が荒れてしまう可能性もありそうだなと…。
◎ ofn-layer-aligner.py について :
前述の exact-aligner.scm を Python-Fu で書き直した、ofn-layer-aligner.py という版もあるらしい。exact-aligner.scm が持っていた不具合をいくつか修正済みとのこと。
_ofn-layer-aligner - GIMP Chat
_Ofnuts' Gimp Tools - Browse /scripts at SourceForge.net
ofn-layer-aligner.zip を入手して解凍すると、ofn-layer-aligner.py というファイルがあるので、GIMPユーザフォルダ/plug-ins/ にコピーしてやればインストールできる。ちなみに、件の zip には使い方の説明書(ofn-layer-aligner.howto.html) も入ってる。
メニュー項目は、レイヤー → Realign。
使い方は、exact-aligner.scm と同じ。GIMPのパスツールを選んで…。
4点を打って…。
レイヤー → Realign、を選択。
アクティブレイヤーの位置が変更されて、位置合わせができた。
_ofn-layer-aligner - GIMP Chat
_Ofnuts' Gimp Tools - Browse /scripts at SourceForge.net
ofn-layer-aligner.zip を入手して解凍すると、ofn-layer-aligner.py というファイルがあるので、GIMPユーザフォルダ/plug-ins/ にコピーしてやればインストールできる。ちなみに、件の zip には使い方の説明書(ofn-layer-aligner.howto.html) も入ってる。
メニュー項目は、レイヤー → Realign。
使い方は、exact-aligner.scm と同じ。GIMPのパスツールを選んで…。
4点を打って…。
レイヤー → Realign、を選択。
アクティブレイヤーの位置が変更されて、位置合わせができた。
◎ SS-path-referenced-scale-move-rotate_v1-0.scm について :
前述の exact-aligner.scm と似た感じで、パスツールを利用して点の位置を指定することでアレコレできる、SS-path-referenced-scale-move-rotate_v1-0.scm という Script-Fu もある。移動、回転、拡大縮小が別々の項目になっているので、利用したい処理だけを選ぶことができる。
_SS-path-referenced-scale-move-rotate_v1-0.scm at master - pixlsus/registry.gimp.org_static - GitHub
_GIMP script scale-move-rotate tutorial.pdf at master - pixlsus/registry.gimp.org_static - GitHub
"GIMP script scale-move-rotate tutorial.pdf" という説明pdfもあるのだけど、github上に置いてあるpdfは、そのままWebブラウザで閲覧できないようで…。一旦ローカルにダウンロードしてから開かないと中身を確認できなかった。一応ここにも置いておくけど、これで見れるのかどうか…。
_gimp_script_scale-move-rotate_tutorial.pdf
さておき。SS-path-referenced-scale-move-rotate_v1-0.scm を入手して、GIMPユーザフォルダ/scripts/ にコピーしてやればインストールできる。
メニュー項目は、レイヤー → 変形 → With Path... → (Move|Ortho|Rotate|Scale) by Path。4項目ほど追加される。
まずは Move by Path の使い方をメモ。パスツールで、移動元の点の位置、移動先の点の位置を指定する。
レイヤー → 変形 → With Path... → Move by Path、を選択。
アクティブレイヤーの位置が移動した。この処理は移動のみで、回転や拡大縮小はしない。
移動直後に赤い色のパスが新規に作られるけれど、これはこの後、回転処理もしたい時に利用する。移動処理のみで済むなら、無視するなり、パスを削除してしまっていい。
回転処理についてもメモ。例えば以下のように、位置がずれていて、かつ、角度が違っているレイヤーがあるとして…。
まずは位置だけ調整する。パスツールで、移動元、移動先の順で、点の位置を指定。
レイヤー → 変形 → With Path... → Move by Path、を選択。
位置のみを変更できた。新規に作成された赤いパスをパスツールでクリックして、角度を指定していく。
水平になっていたパスの点の位置を、移動元に合わせる。垂直になっていたパスの点の位置を、移動先に合わせる。
レイヤー → 変形 → With Path... → Rotate by Path、を選択。
アクティブレイヤーが回転して位置合わせができた。
Ortho by Path を使うと、水平、もしくは垂直に、レイヤーを回転させることもできる。例えば以下のような状態のレイヤーがあるとして、水平にしたい部分をパスツールで指定する。
レイヤー → 変形 → With Path... → Ortho by Path、を選択。
レイヤーが水平に見えるように回転してくれた。
ちなみに、垂直になるように回転させたい場合は、縦方向に長いパスを指定してやればいい。おそらく45度を境目にして判別してるのではないかな…。たぶん。
Scale by Path を使うと、拡大縮小をさせることもできる。例えば以下のような状態のレイヤーがあるとして、移動先、移動元の順に、パスツールで点を指定する。注意したいのは、2本の線があるような感じで指定すること。2本目の線の最初の点は、Shift + 左クリックをする。これで、線が分離してるようなパスを作れる。
レイヤー → 変形 → With Path... → Scale by Path、を選択。
アクティブレイヤーが拡大縮小されて位置合わせができた。
_SS-path-referenced-scale-move-rotate_v1-0.scm at master - pixlsus/registry.gimp.org_static - GitHub
_GIMP script scale-move-rotate tutorial.pdf at master - pixlsus/registry.gimp.org_static - GitHub
"GIMP script scale-move-rotate tutorial.pdf" という説明pdfもあるのだけど、github上に置いてあるpdfは、そのままWebブラウザで閲覧できないようで…。一旦ローカルにダウンロードしてから開かないと中身を確認できなかった。一応ここにも置いておくけど、これで見れるのかどうか…。
_gimp_script_scale-move-rotate_tutorial.pdf
さておき。SS-path-referenced-scale-move-rotate_v1-0.scm を入手して、GIMPユーザフォルダ/scripts/ にコピーしてやればインストールできる。
メニュー項目は、レイヤー → 変形 → With Path... → (Move|Ortho|Rotate|Scale) by Path。4項目ほど追加される。
まずは Move by Path の使い方をメモ。パスツールで、移動元の点の位置、移動先の点の位置を指定する。
レイヤー → 変形 → With Path... → Move by Path、を選択。
アクティブレイヤーの位置が移動した。この処理は移動のみで、回転や拡大縮小はしない。
移動直後に赤い色のパスが新規に作られるけれど、これはこの後、回転処理もしたい時に利用する。移動処理のみで済むなら、無視するなり、パスを削除してしまっていい。
回転処理についてもメモ。例えば以下のように、位置がずれていて、かつ、角度が違っているレイヤーがあるとして…。
まずは位置だけ調整する。パスツールで、移動元、移動先の順で、点の位置を指定。
レイヤー → 変形 → With Path... → Move by Path、を選択。
位置のみを変更できた。新規に作成された赤いパスをパスツールでクリックして、角度を指定していく。
水平になっていたパスの点の位置を、移動元に合わせる。垂直になっていたパスの点の位置を、移動先に合わせる。
レイヤー → 変形 → With Path... → Rotate by Path、を選択。
アクティブレイヤーが回転して位置合わせができた。
Ortho by Path を使うと、水平、もしくは垂直に、レイヤーを回転させることもできる。例えば以下のような状態のレイヤーがあるとして、水平にしたい部分をパスツールで指定する。
レイヤー → 変形 → With Path... → Ortho by Path、を選択。
レイヤーが水平に見えるように回転してくれた。
ちなみに、垂直になるように回転させたい場合は、縦方向に長いパスを指定してやればいい。おそらく45度を境目にして判別してるのではないかな…。たぶん。
Scale by Path を使うと、拡大縮小をさせることもできる。例えば以下のような状態のレイヤーがあるとして、移動先、移動元の順に、パスツールで点を指定する。注意したいのは、2本の線があるような感じで指定すること。2本目の線の最初の点は、Shift + 左クリックをする。これで、線が分離してるようなパスを作れる。
レイヤー → 変形 → With Path... → Scale by Path、を選択。
アクティブレイヤーが拡大縮小されて位置合わせができた。
◎ 余談。手動で位置合わせをする場合 :
手動で位置合わせをしたい時は、上のレイヤーの合成モードを「差の絶対値」にしておくと楽かもしれない。
一応メモしておくけれど、GIMPの移動ツールでレイヤーの位置を調整する際、カーソルキーを使えば1ドット単位で調整できる。
更に余談。GIMPの統合変形ツールを使えば前述のスクリプト群と似たようなことができるよ、という話も見かけた。ピボット(回転軸)を、固定したい点の位置までずらして、Ctrlキーを押しながらピボットを中心にして拡大縮小するのがコツらしい。
_ofn-layer-aligner
一応メモしておくけれど、GIMPの移動ツールでレイヤーの位置を調整する際、カーソルキーを使えば1ドット単位で調整できる。
更に余談。GIMPの統合変形ツールを使えば前述のスクリプト群と似たようなことができるよ、という話も見かけた。ピボット(回転軸)を、固定したい点の位置までずらして、Ctrlキーを押しながらピボットを中心にして拡大縮小するのがコツらしい。
_ofn-layer-aligner
[ ツッコむ ]
以上、1 日分です。