Verschiebe eine Ebene an eine bestimmte X, Y Position in Gimp

58

Wie verschiebe ich eine Ebene in Gimp an eine bestimmte XY-Position innerhalb der Zeichenfläche?

Derzeit kann ich nur mit den Hilfslinien und / oder der Mausposition darauf blicken. Ich möchte die genauen X- und Y-Koordinaten angeben.

Scott
quelle
Ich möchte das auch wissen oder wie man es in Photoshop macht. Ich habe eine Frage dazu gestellt. superuser.com/questions/345669/…
Jonny
1
Scheint
SabreWolfy
Ja, es ist möglich. Lies meine Antwort.
David

Antworten:

31

Ich fürchte, dass Gimp es nicht einschließt, weil es langweilig ist. Es ist einfach nicht die richtige Art, Elemente beim Entwerfen auszurichten, obwohl ich weiß, dass es manchmal als Abkürzung nützlich ist. Wie auch immer, der beste (richtige) Ansatz ist mit Guides:


A) Schritt 1 - Erstellen Sie die Hilfslinien

  1. Gehen Sie zu Image-> Guide-> New Guide
  2. Geben Sie an, ob Sie eine horizontale oder vertikale Führung wünschen
  3. Geben Sie die Anzahl der Pixel an
  4. Wiederholen Sie den Vorgang für eine weitere horizontale oder vertikale Hilfslinie (Sie können auch weitere Hilfslinien ausführen, um Breite und Höhe festzulegen).

Alternativ können Sie auch Hilfslinien erstellen, die aus den Linealen gezogen werden:

  1. Ziehen Sie eine Hilfslinie (vom oberen Lineal ausgehend) auf die gewünschte Y-Koordinate.
  2. Ziehen Sie eine Hilfslinie (beginnend mit dem linken Lineal) auf die gewünschte X-Koordinate.

B) Schritt 2 - Bewegen Sie die Leinwand

Sie können das Verschiebewerkzeug verwenden.

  1. Wähle deine Ebene aus
  2. Gehen Sie zu Extras -> Transformationswerkzeuge -> Verschieben
  3. Ziehen Sie die Ebene auf die Hilfslinien. Gimp gibt Ihnen eine Hand mit den genauen Pixeln.

Eines der Konstruktionsprinzipien ist, dass die Dinge in Ihrem gesamten Projekt aufeinander abgestimmt sind. Wenn Sie die Anzahl der Ausrichtungen (Hilfslinien) reduzieren, erhalten Sie ein saubereres Design. Ich denke, aus diesem Grund enthält gimp kein Werkzeug, um die genauen Koordinaten anzugeben. Wenn Sie diesem Konstruktionsprinzip folgen möchten, ist es nur eine mühsame Arbeit, die genauen Koordinaten nacheinander anzugeben.

toto_tico
quelle
Genau das, was ich brauche - danke. Anwendungsfall: Erstellen eines Hintergrundbilds für die Einrichtung mit zwei Köpfen aus zwei anderen Hintergrundbildern. :)
smbear
22
  1. Pick Bildbeschreibung hier eingeben(Ausrichtungswerkzeug).
  2. Mach es Relative to Image.
  3. Klicken Sie auf Ihre Ebene (in der Leinwand).
  4. Geben Sie X in das OffsetFeld ein.
  5. Klicken Sie auf Distribute/ Bildbeschreibung hier eingeben(linker Pfeil).
  6. Geben Sie Y in das OffsetFeld ein.
  7. Klicken Sie auf Distribute/ Bildbeschreibung hier eingeben(Pfeil nach oben).

Das ist es!

David
quelle
1
Dies funktioniert bei negativem Offset.
Loda
1
Beachten Sie, dass Sie anscheinend nur die oberste sichtbare Ebene auswählen können. Das heißt, Sie müssen Ebenen über der auszurichtenden Ebene ausblenden (gimp 2.8.16).
Skippy le Grand Gourou
Verwendet dies die Einheit der Pixel? Es scheint mein Bild weit mehr zu bewegen, als ich erwarten würde.
Palswim
@palswim Bei mir hat es funktioniert, als ich auf die obere Gruppe von Schaltflächen (Ausrichten) anstatt auf die untere Gruppe (Verteilen) geklickt habe. Ja, es wird in Pixeln gemessen (zumindest in meiner Konfiguration).
Rodrigo
20

Hierzu gibt es ein Skript, das von der GIMP-Plugin-Registrierung heruntergeladen werden kann. Es wird genannt:

Ebene verschieben nach (Download) .

Installieren:

  1. Verschieben Sie das Skript in ein %USERPROFILE\.gimp-2.8\scriptsVerzeichnis unter Windows, ~/Library/Application Support/GIMP/2.8/scriptsOS X oder ~/.gimp-2.8/scriptsLinux. ( Offizielle Anweisungen )

  2. Klicks Filters-> Script-Fu-> Refresh scripts.

  3. Der neue Menüpunkt wird am unteren Rand des LayerMenüs angezeigt Move to.

garyb
quelle
Schöne erste Antwort!
Slm
Fast perfekt! Wäre schön, wenn der Parameterdialog die aktuellen Koordinaten des Layers als Standardwerte verwenden würde.
Oliver Giesen
4
Sie müssen diese .scm-Datei herunterladen und unter %USERPROFILE%\.gimp-2.8\scriptsWindows ablegen. Führen Sie dann Filters-> Script-Fu-> aus. Refresh ScriptsSie ist dann als unterstes Element verfügbar. Layer->Move To
DarkWalker
3
Davids Antwort erledigt den Job ohne Skript.
Michael S.
1
Funktioniert NICHT bei negativem Offset. und die UX ist schlecht (behalten Sie nicht den letzten Wert usw.).
Loda
11

Ich benutze GIMP 2.6.11.

Mit diesen Python-Zeilen kann die aktive Ebene von der Python-Konsole an eine absolute Position wie (32, 64) verschoben werden:

>>> 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)

Alternativ, wenn Sie nur den Inhalt der Ebene verschieben möchten:

Klicken Sie mit der rechten Maustaste auf Ebene> Transformieren> Versatz

oder Umschalt + Strg + O

Nicolas Kaiser
quelle
1
Dadurch werden die Pixel in der Ebene verschoben, nicht die Ebene selbst. Ich muss die eigentliche Ebene verschieben. Was Sie vorgeschlagen haben, funktioniert möglicherweise, wenn die Ebene dieselbe Größe wie die Leinwand hat oder zumindest groß genug ist, um keine nicht transparenten Pixel in der Ebene zu beschneiden.
Scott
@Scott: Ich verstehe - sorry, ich habe keinen einfacheren Weg gefunden, aber zumindest habe ich herausgefunden, wie ich die Ebene mit einigen Python-Zeilen auf eine absolute Position verschieben kann.
Nicolas Kaiser
2
Zeile drei Ihres Codes sollte lauten img=gimp.image_list()[0]. Das _ hat bei mir nicht funktioniert.
Apple16
3

Es gibt eine sehr bequeme Möglichkeit, dies zu tun, seitdem Gimp v.2.10 verfügbar ist:

  1. Doppelklicken Sie auf die Ebene, die Sie verschieben möchten (oder klicken Sie mit der rechten Maustaste darauf und wählen Sie "Ebenenattribute bearbeiten").

  2. Das Dialogfeld "Ebenenattribute bearbeiten" wird angezeigt. Dort können Sie die X / Y-Offsets an Ihre Anforderungen anpassen

Einfach so einfach! :)

Bearbeiten Sie die Layer X / Y Offsets Attribute

BEARBEITEN:

Da @Michael in seinem Kommentar zu meiner Antwort danach gefragt hat, füge ich ein Skript hinzu, das ALLE Bildebenen um die angegebenen x, y-Offsets verschiebt.

Damit es funktioniert, müssen Sie eine Datei im Gimp-Skriptordner erstellen (ein Verweis hierzu, falls erforderlich: Hieroder Hier) mit folgendem Inhalt:

; 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/")

Wenn Sie es richtig machen, finden Sie einen neuen Befehl im Menü "Ebene" mit dem Namen "Alle Ebenen verschieben ...". Starten Sie ihn, und es wird ein Dialogfeld angezeigt, in dem Sie die X- und Y-Offsets festlegen können. Das ist es.

Danicotra
quelle
Gibt es eine Möglichkeit, dies ein bisschen schneller zu machen, wenn Sie viele Ebenen verschieben müssen (wie in Hunderten)? Es wäre großartig, wenn dieses Ding andocken könnte, damit ich es nicht für jede Ebene ansprechen müsste!
Michael
1
@Michael: Nun, ich denke, du solltest in diesem Fall mit ein paar Skripten arbeiten, ähnlich wie bei Nicolas Kaiser, der eine Lösung vorgeschlagen hat, aber mit einer Schleife auf Bildebenen ... Ich habe gerade meine Antwort bearbeitet, um dir zu zeigen, wie, sieh sie dir an. (Ich hätte eine separate Antwort darauf gegeben, aber das OP hat speziell darum gebeten, EINE Ebene zu verschieben, nicht alle. Wenn Sie eine neue Frage dazu stellen, würde ich gerne dort antworten und einige Screenshots und den Rest hinzufügen. - D) Cheers
Danicotra