Mover una capa a una posición X, Y específica en Gimp

58

¿Cómo muevo una capa a una posición XY específica dentro del lienzo en Gimp?

Actualmente, la única forma que puedo encontrar es simplemente mirarlo con las guías y / o la posición del mouse. Quiero especificar las coordenadas exactas de X e Y.

Scott
fuente
Quiero saber esto también, o cómo hacerlo en Photoshop. Hice una pregunta para eso. superuser.com/questions/345669/…
Jonny
1
No parece ser (fácilmente) posible en GIMP sin usar el código Python como se detalla a continuación: graphicdesign.stackexchange.com/a/6813/8841
SabreWolfy
Sí, es posible. Lee mi respuesta.
David

Respuestas:

31

Me temo que Gimp no lo incluye porque es tedioso. Simplemente no es la forma adecuada de alinear elementos cuando está diseñando, aunque reconozco que a veces es útil como atajo. De todos modos, el mejor enfoque (correcto) es con guías:


A) Paso 1 - Crea las guías

  1. Vaya a Imagen-> Guía-> Nueva guía
  2. Especifica si quieres una guía horizontal o vertical
  3. Especifica el número de píxeles
  4. Repita el procedimiento para otra guía horizontal o vertical (también puede hacer más guías para especificar el ancho y la altura)

Alternativamente, también puede crear las guías arrastrando desde las reglas:

  1. Arrastre hacia abajo (comenzando desde la regla superior) una guía a la coordenada Y que desee.
  2. Arrastre hacia abajo (comenzando desde la regla izquierda) una guía a la coordenada X que desee.

B) Paso 2 - Mueve el lienzo

Puedes usar la herramienta de movimiento.

  1. Selecciona tu capa
  2. Vaya a Herramientas -> Herramientas de transformación -> Mover
  3. Arrastre la capa a las guías. Gimp te dará una mano con los píxeles exactos.

Uno de los principios de diseño es que debe alinear las cosas en todo su proyecto. Reducir el número de alineaciones (guías) le ayuda a obtener un diseño más limpio. Creo que es por eso que Gimp no incluye una herramienta para especificar las coordenadas exactas. Si desea seguir este principio de diseño, especificar coordenadas exactas una por una se convierte en una labor tediosa.

toto_tico
fuente
Exactamente lo que necesito, gracias. Caso de uso: crear un fondo de pantalla para la configuración de doble cabezal a partir de otros dos fondos de pantalla. :)
smbear
22
  1. Pick ingrese la descripción de la imagen aquí(herramienta de alineación).
  2. Hacerlo Relative to Image.
  3. Haga clic en su capa (en el lienzo).
  4. Ingrese X en el Offsetcampo.
  5. Haga clic en Distribute/ ingrese la descripción de la imagen aquí(flecha izquierda).
  6. Ingrese Y en el Offsetcampo.
  7. Haga clic en Distribute/ ingrese la descripción de la imagen aquí(flecha hacia arriba).

¡Eso es!

David
fuente
1
Este trabajo para compensación negativa.
Loda
1
Tenga en cuenta que parece que solo puede seleccionar la capa superior visible, es decir, uno tiene que ocultar las capas en la parte superior de la capa para alinearse (gimp 2.8.16).
Skippy le Grand Gourou
¿Utiliza esto la unidad de píxeles? Parece mover mi imagen mucho más de lo que esperaría.
palswim
@palswim Para mí funcionó cuando hice clic en el grupo superior de botones (Alinear) en lugar del grupo inferior (Distribuir). Sí, se mide en píxeles (al menos en mi configuración).
Rodrigo el
20

Hay un script para hacer esto que se puede descargar desde el registro del complemento GIMP. Se llama:

Mover capa a (descargar) .

Instalar:

  1. Mueva el script al %USERPROFILE\.gimp-2.8\scriptsdirectorio en Windows, ~/Library/Application Support/GIMP/2.8/scriptsen OS X o ~/.gimp-2.8/scriptsen Linux. ( Instrucciones oficiales )

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

  3. El nuevo elemento del menú aparecerá en la parte inferior del Layermenú Move to.

garyb
fuente
Buena primera respuesta!
slm
¡Casi perfecto! Sería bueno si el cuadro de diálogo de parámetros utilizara las coordenadas actuales de la capa como los valores predeterminados.
Oliver Giesen
44
Debe descargar ese archivo .scm y ponerlo en %USERPROFILE%\.gimp-2.8\scriptsWindows, luego hacer Filters-> Script-Fu-> Refresh Scriptsy estará disponible como el elemento más inferior Layer->Move To
DarkWalker
3
La respuesta de David hace el trabajo sin un script.
Michael S.
1
NO funciona para compensación negativa. y el UX es pobre (no guarde el último valor, etc.).
Loda
11

Estoy usando GIMP 2.6.11.

Con estas líneas de Python, la capa activa se puede mover a una posición absoluta, como (32, 64), desde la consola de 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)

Alternativamente, si solo desea mover el contenido de la capa:

clic derecho, Capa> Transformar> Desplazamiento

o Shft + Ctrl + O

Nicolas Kaiser
fuente
1
Esto hace que los píxeles dentro de la capa se muevan, en lugar de la capa en sí misma. Necesito mover la capa real. Lo que sugirió puede funcionar si la capa es del mismo tamaño que el lienzo, o al menos lo suficientemente grande como para no recortar píxeles no transparentes dentro de la capa.
Scott
@Scott: Ya veo, lo siento, no encontré una manera más fácil, pero al menos descubrí cómo mover la capa a una posición absoluta con algunas líneas de Python.
Nicolas Kaiser
2
La línea tres de su código debe ser img=gimp.image_list()[0]. El _ no funcionó para mí.
apple16
3

Hay una forma muy conveniente de hacer esto disponible desde el Gimp v.2.10:

  1. haga doble clic en la capa que desea mover (o haga clic derecho sobre ella y seleccione "Editar atributos de capa")

  2. aparecerá el cuadro de diálogo "Editar atributos de capa" y allí podrá cambiar los desplazamientos X / Y según sus necesidades

Simplemente así de fácil! :)

Editar atributos de compensaciones de capa X / Y

EDITAR:

Como @Michael preguntó al respecto en su comentario a mi respuesta, estoy agregando un script que moverá TODAS las capas de imagen en desplazamientos especificados x, y.

Para que funcione, debe crear un archivo en la carpeta de script de Gimp (alguna referencia para esto si lo necesita: aquío aquí) con el siguiente contenido:

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

Si lo hace correctamente, encontrará un nuevo comando en el menú "Capa" llamado "Mover todas las capas ...", ejecútelo y aparecerá un cuadro de diálogo que le permitirá decidir las compensaciones X e Y. Eso es.

danicotra
fuente
¿Alguna forma de hacer esto un poco más rápido cuando tienes muchas capas para mover (como en cientos)? ¡Sería genial si esto pudiera acoplarse, así que no tuve que mencionarlo para cada capa!
Michael
1
@Michael: Bueno, supongo que debería ir con algunas secuencias de comandos en ese caso, de manera similar a la solución sugerida por Nicolas Kaiser, pero en bucle en las capas de imagen ... Acabo de editar mi respuesta para mostrarle cómo, eche un vistazo. (Hubiera respondido por separado, pero el OP solicitó específicamente mover UNA capa, no todas. Si hace una nueva pregunta para esto, me complacería responderle agregando algunas capturas de pantalla y todo lo demás; - D) Saludos
danicotra