レイヤーをGimpの特定のX、Y位置に移動します


57

Gimpのキャンバス内の特定のXY位置にレイヤーを移動するにはどうすればよいですか?

現在、私が見つけることができる唯一の方法は、ガイドやマウスの位置でそれを見るだけです。正確なX座標とY座標を指定したい。


私もこれを知りたい、またはPhotoshopでそれをする方法を知りたい。質問をしました。superuser.com/questions/345669/…–
ジョニー

1
以下に詳述するPythonコードを使用しないと、GIMPで(簡単に)実行できないようです:graphicdesign.stackexchange.com/a/6813/8841
SabreWolfy

はい、可能です。私の答えを読んでください。
デビッド

回答:


31

退屈なので、Gimpには含まれていません。設計時に要素を配置する適切な方法ではありませんが、ショートカットとして役立つ場合があることを認識しています。とにかく、最良の(正しい)アプローチはガイドを使用することです:


A)ステップ1-ガイドを作成する

  1. 画像->ガイド->新しいガイドに移動します
  2. 必要に応じて、水平または垂直ガイドを指定します
  3. ピクセル数を指定します
  4. 別の水平または垂直ガイドに対して手順を繰り返します(幅と高さを指定するためにさらにガイドを行うこともできます)

または、定規からドラッグするガイドを作成することもできます。

  1. 必要なY座標までガイドをドラッグします(トップルーラーから開始)。
  2. 必要なX座標まで(左のルーラーから開始して)ガイドを下にドラッグします。

B)ステップ2-キャンバスを移動する

移動ツールを使用できます。

  1. レイヤーを選択
  2. [ツール]-> [変換ツール]-> [移動]に移動します
  3. レイヤーをガイドにドラッグします。Gimpは正確なピクセルで手を与えます。

設計原則の1つは、プロジェクト全体で物事を整合させる必要があるということです。アライメント(ガイド)の数を減らすと、よりクリーンなデザインを得ることができます。これが、gimpに正確な座標を指定するツールが含まれていない理由だと思います。この設計原理に従って、正確な座標を1つずつ指定するのは面倒な作業になります。


まさに私が必要なもの-ありがとう。使用例:他の2つの壁紙からデュアルヘッドセットアップ用の壁紙を作成します。:)
smbear

21
  1. ピックここに画像の説明を入力してください(位置合わせツール)。
  2. それを作りますRelative to Image
  3. (キャンバスで)レイヤーをクリックします。
  4. OffsetフィールドにXを入力します。
  5. Distribute/ ここに画像の説明を入力してください(左矢印)をクリックします。
  6. OffsetフィールドにYを入力します。
  7. Distribute/ ここに画像の説明を入力してください(上矢印)をクリックします。

それでおしまい!


1
これは負のオフセットに対して機能します。
ロダ

1
最上位の可視レイヤーのみを選択できるように思われることに注意してください。つまり、整列するレイヤーの上にあるレイヤーを非表示にする必要があります(gimp 2.8.16)。
スキッピールグラングロウ

これはピクセル単位を使用しますか?想像以上に私のイメージを動かしているようです。
palswim

@palswim私にとっては、一番下のグループ(Distribute)ではなく、一番上のボタングループ(Align)をクリックすると機能しました。はい、ピクセル単位で測定されます(少なくとも私の構成では)。
ロドリゴ

20

これを行うためのスクリプトがあり、GIMPプラグインレジストリからダウンロードできます。という:

レイヤーを移動(ダウンロード)します。

インストールする:

  1. %USERPROFILE\.gimp-2.8\scriptsWindows、~/Library/Application Support/GIMP/2.8/scriptsOS X、または~/.gimp-2.8/scriptsLinuxのディレクトリにスクリプトを移動します。(公式の指示

  2. Filters-> Script-Fu->をクリックしRefresh scriptsます。

  3. 新しいメニュー項目がメニューの下部に表示されLayerますMove to


素敵な最初の答え!
slm

ほぼ完璧!パラメータダイアログがレイヤーの現在の座標をデフォルト値として使用していると便利です。
オリバーギーゼン

4
その.scmファイルをダウンロードし%USERPROFILE%\.gimp-2.8\scriptsてWindowsに入れてからFilters-> Script-Fu-> Refresh Scriptsを実行すると、一番下の項目として利用可能になりますLayer->Move To
DarkWalker 14年

3
デビッドの答えは、スクリプトなしで仕事をしています。
マイケルS.

1
負のオフセットでは機能しません。UXが貧弱です(最後の値を保持しないなど)。
ロダ

11

GIMP 2.6.11を使用しています。

Pythonのこれらの行を使用すると、アクティブなレイヤーをPythonコンソールから(32、64)のような絶対位置に移動できます。

>>> x_new = 32
>>> y_new = 64
>>> img = _[0]
>>> layer = img.active_layer
>>> x_off, y_off = layer.offsets
>>> pdb.gimp_layer_translate(layer, x_new - x_off, y_new - y_off)

または、レイヤーのコンテンツのみを移動する場合:

右クリックして、レイヤー>変形>オフセット

またはShft + Ctrl + O


1
これにより、レイヤー自体ではなく、レイヤーのピクセルが移動します。実際のレイヤーを移動する必要があります。レイヤーがキャンバスと同じサイズであるか、少なくともレイヤー内の非透明ピクセルをクリップしないほど十分に大きい場合、提案したものが機能する可能性があります。
スコット

@スコット:なるほど-申し訳ありませんが、簡単な方法は見つかりませんでしたが、少なくとも、Pythonのいくつかの行を使用してレイヤーを絶対位置に移動する方法を見つけました。
ニコラスカイザー

2
3行目のコードはである必要がありますimg=gimp.image_list()[0]。_は私には役に立たなかった。
apple16

2

Gimp v.2.10以降では、これを行う非常に便利な方法が利用できます。

  1. 移動するレイヤーをダブルクリックします(または右クリックして[レイヤー属性の編集]を選択します)

  2. [レイヤー属性の編集]ダイアログが表示され、そこで必要に応じてX / Yオフセットを変更できます

そのように簡単です!:)

レイヤーX / Yオフセット属性の編集

編集:

@Michaelが私のコメントへのコメントでそれについて尋ねたので、指定されたx、yオフセットによってすべての画像レイヤーを移動するスクリプトを追加しています。

動作させるには、Gimpスクリプトフォルダーにファイルを作成する必要があります(必要に応じて、次の内容を参照してください:ここにまたはここに)。

; This script is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This script is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.

;; Command is installed in "Layer->Move all layers..."
;;
;; The purpose of this script is to move all image layers by specified x,y offsets
;; X and Y offset parameters must be provided (use integer numbers as values)
;;


(define (dn-move-all-layers orig-image drawable
                                       x-offset y-offset)
  (define (get-all-layers img)
    (let* (
      (all-layers (gimp-image-get-layers img))
      (i (car all-layers))
      (bottom-to-top ())
     )
     (set! all-layers (cadr all-layers))
     (while (> i 0)
       (set! bottom-to-top (append bottom-to-top (cons (aref all-layers (- i 1)) '())))
       (set! i (- i 1))
     )
     bottom-to-top
    )
  )
  (define (move-layer orig-image layer-id offset-x offset-y)
    (gimp-layer-set-offsets
      layer-id
      offset-x
      offset-y
    )
  )
  (let* (
      (layers nil)
      (layerpos 1)
      (layer-id "")
      (x-os 0)
      (y-os 0)
      (orig-selection 0)
   )
   (gimp-image-undo-disable orig-image)
   (set! orig-selection (car (gimp-selection-save orig-image)))
   (gimp-selection-none orig-image)

   (set! x-os x-offset)
   (set! y-os y-offset)
   (set! layers (get-all-layers orig-image))
   (while (pair? layers)
     (move-layer orig-image (car layers) x-os y-os)
     (set! layers (cdr layers))
     (set! layerpos (+ layerpos 1))
   )
   (gimp-displays-flush)
   (gimp-selection-load orig-selection)
   (gimp-image-remove-channel orig-image orig-selection)
   (gimp-image-undo-enable orig-image)
  )
)

(script-fu-register "dn-move-all-layers"
 "Move all layers..."
 "Move each layer by specified x,y offsets."
 "danicotra"
 "danicotra"
 "08/08/2019"
 ""
 SF-IMAGE "Input image" 0
 SF-DRAWABLE "Drawable" 0
 SF-VALUE "X offset" "0"
 SF-VALUE "Y offset" "0"
)

(script-fu-menu-register "dn-move-all-layers"
                         "<Image>/Layer/")

正しく実行すると、[レイヤー]メニューに[すべてのレイヤーを移動...]という新しいコマンドが表示され、起動するとダイアログが表示され、XオフセットとYオフセットを決定できます。それでおしまい。


移動するレイヤーがたくさんある場合(数百など)、これを少し速くする方法はありますか?このことをドッキングできれば、レイヤーごとに表示する必要はありません。
マイケル

1
@Michael:そうですね、その場合は、ニコラスカイザーが提案した解決策と同様にスクリプトを使用する必要があると思いますが、イメージレイヤーでループします... (私はそれに対して別の答えをしたでしょうが、OPはそれらのすべてではなく、1つのレイヤーを移動するように特別に要求しました。これについて新しい質問をする場合D)乾杯
danicotra
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.