Sposta un livello nella posizione X, Y specifica in Gimp


58

Come faccio a spostare un livello in una posizione XY specifica all'interno dell'area di disegno in Gimp?

Attualmente, l'unico modo che riesco a trovare è semplicemente osservarlo con le guide e / o la posizione del mouse. Voglio specificare le coordinate X e Y esatte.


Voglio sapere anche questo, o come farlo in Photoshop. Ho fatto una domanda per questo. superuser.com/questions/345669/…
Jonny,

1
Non sembra essere (facilmente) possibile in GIMP senza usare il codice Python come descritto di seguito: graphicdesign.stackexchange.com/a/6813/8841
SabreWolfy,

Sì, è possibile. Leggi la mia risposta
David,

Risposte:


31

Temo che Gimp non lo includa perché è noioso. Semplicemente non è il modo appropriato di allineare gli elementi durante la progettazione, anche se riconosco che a volte è utile come scorciatoia. Comunque, l'approccio migliore (corretto) è con le guide:


A) Passaggio 1: creare le guide

  1. Vai a Immagine-> Guida-> Nuova guida
  2. Specificare se si desidera e una guida orizzontale o verticale
  3. Specifica il numero di pixel
  4. Ripeti la procedura per un'altra Guida orizzontale o verticale (puoi anche fare più guide per specificare larghezza e altezza)

In alternativa, puoi anche creare le guide trascinandole dai righelli:

  1. Trascina verso il basso (a partire dal righello superiore) una guida sulla coordinata Y che desideri.
  2. Trascina verso il basso (a partire dal righello di sinistra) una guida alla coordinata X che desideri.

B) Passaggio 2: spostare la tela

È possibile utilizzare lo strumento di spostamento.

  1. Seleziona il tuo livello
  2. Vai su Strumenti -> Strumenti di trasformazione -> Sposta
  3. Trascina il livello sulle guide. Gimp ti darà una mano con i pixel esatti.

Uno dei principi di progettazione è che dovresti allineare le cose nell'intero progetto. Ridurre il numero di allineamenti (guide) consente di ottenere un design più pulito. Penso che questo sia il motivo per cui gimp non include uno strumento per specificare le coordinate esatte. Se vuoi seguire questo principio di progettazione, specificare le coordinate esatte una per una diventa solo un lavoro noioso.


Esattamente quello di cui ho bisogno - grazie. Caso d'uso: creazione di uno sfondo per la configurazione a doppia testa da altri due sfondi. :)
smbear il

22
  1. Seleziona inserisci qui la descrizione dell'immagine(strumento di allineamento).
  2. Fallo Relative to Image.
  3. Fai clic sul tuo livello (nell'area di disegno).
  4. Inserisci X nel Offsetcampo.
  5. Fare clic su Distribute/ inserisci qui la descrizione dell'immagine(freccia sinistra).
  6. Inserisci Y nel Offsetcampo.
  7. Fai clic su Distribute/ inserisci qui la descrizione dell'immagine(freccia su).

Questo è tutto!


1
Questo lavoro per offset negativo.
Loda,

1
Si noti che sembra che sia possibile selezionare solo il livello visibile in alto, ovvero è necessario nascondere i livelli in cima al livello per essere allineati (gimp 2.8.16).
Skippy le Grand Gourou,

Questo utilizza l'unità di pixel? Sembra spostare la mia immagine molto più di quanto mi aspetterei.
Palswim,

@palswim Per me ha funzionato quando ho fatto clic sul gruppo superiore di pulsanti (Allinea) anziché sul gruppo inferiore (Distribuisci). Sì, è misurato in pixel (almeno nella mia configurazione).
Rodrigo,

20

Esiste uno script per farlo che può essere scaricato dal registro dei plug-in GIMP. È chiamato:

Sposta livello in (download) .

Installare:

  1. Sposta lo script nella %USERPROFILE\.gimp-2.8\scriptsdirectory su Windows, ~/Library/Application Support/GIMP/2.8/scriptssu OS X o ~/.gimp-2.8/scriptssu Linux. ( Istruzioni ufficiali )

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

  3. La nuova voce di menu verrà visualizzata nella parte inferiore del Layermenu Move to.


Bella prima risposta!
Slm

Quasi perfetto! Sarebbe bello se la finestra di dialogo dei parametri usasse le coordinate correnti del layer come valori predefiniti.
Oliver Giesen,

4
Devi scaricare quel file .scm e inserirlo in %USERPROFILE%\.gimp-2.8\scriptsWindows, quindi fare Filters-> Script-Fu-> Refresh Scriptse sarà disponibile come elemento più in basso Layer->Move To
DarkWalker il

3
La risposta di Davids fa il lavoro senza una sceneggiatura.
Michael S.,

1
NON funziona per offset negativo. e la UX è scadente (non conservare l'ultimo valore, ecc.).
Loda,

11

Sto usando GIMP 2.6.11.

Con queste linee di Python il layer attivo può essere spostato in una posizione assoluta, come (32, 64), dalla console di Python:

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

In alternativa, se desideri spostare solo il contenuto del livello:

tasto destro del mouse, Livello> Trasforma> Offset

o Maiusc + Ctrl + O


1
Questo fa muovere i pixel all'interno del livello, piuttosto che il livello stesso: ho bisogno di spostare il livello effettivo. Quello che hai suggerito potrebbe funzionare se il livello ha le stesse dimensioni della tela o almeno abbastanza grande da non tagliare pixel non trasparenti all'interno del livello.
Scott,

@Scott: vedo - scusa non ho trovato un modo più semplice, ma almeno ho capito come spostare il livello in una posizione assoluta con alcune linee di Python.
Nicolas Kaiser,

2
La riga tre del codice dovrebbe essere img=gimp.image_list()[0]. _ Non ha funzionato per me.
apple16,

3

C'è un modo molto conveniente per farlo disponibile dal Gimp v.2.10:

  1. fai doppio clic sul livello che desideri spostare (o fai clic destro su di esso e seleziona "Modifica attributi livello")

  2. la finestra di dialogo "Modifica attributi livello" verrà visualizzata e lì puoi modificare gli offset X / Y in base alle tue esigenze

Semplicemente così! :)

Modifica attributi di offset layer X / Y

MODIFICARE:

Come @Michael ha chiesto al riguardo nel suo commento alla mia risposta, sto aggiungendo uno script che sposterà TUTTI i livelli di immagine specificando gli offset x, y.

Per farlo funzionare devi creare un file nella cartella degli script Gimp (qualche riferimento per questo se ne hai bisogno: Quio Qui) con il seguente contenuto:

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

Se lo fai nel modo giusto troverai un nuovo comando nel menu "Livello" chiamato "Sposta tutti i livelli ...", avvialo e apparirà una finestra di dialogo che ti permetterà di decidere gli offset X e Y. Questo è tutto.


Un modo per renderlo un po 'più veloce quando hai molti livelli da spostare (come in centinaia)? Sarebbe bello se questa cosa potesse attraccare, quindi non ho dovuto mostrarla per ogni livello!
Michael,

1
@Michael: Beh, immagino che dovresti andare con alcuni script in quel caso, in modo simile alla soluzione suggerita da Nicolas Kaiser ma eseguendo il looping sui livelli dell'immagine ... Ho appena modificato la mia risposta per mostrarti come, dai un'occhiata. (Avrei fatto una risposta separata per questo, ma l'OP ha chiesto specificamente di spostare UN livello, non tutti. Se fai una nuova domanda per questo, sarei felice di rispondere lì aggiungendo alcuni screenshot e tutto il resto; - D) Cin cin
danicotra
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.