Mova uma camada para a posição específica X, Y no Gimp

58

Como mover uma camada para uma posição XY específica dentro da tela no Gimp?

Atualmente, a única maneira que posso encontrar é apenas observá-lo com as guias e / ou a posição do mouse. Eu quero especificar as coordenadas X e Y exatas.

Scott
fonte
Também quero saber isso ou como fazê-lo no Photoshop. Eu fiz uma pergunta para isso. superuser.com/questions/345669/…
Jonny
11
Não parece ser (facilmente) possível no GIMP sem usar o código Python, conforme detalhado abaixo: graphicdesign.stackexchange.com/a/6813/8841
SabreWolfy 2/12/12
Sim, é possível. Leia minha resposta.
David

Respostas:

31

Receio que o Gimp não o inclua porque é tedioso. Simplesmente não é a maneira apropriada de alinhar elementos quando você está projetando, embora reconheça que às vezes é útil como atalho. De qualquer forma, a melhor abordagem (correta) é com guias:


A) Etapa 1 - Crie os guias

  1. Vá para Imagem-> Guia-> Novo Guia
  2. Especifique se deseja e guia horizontal ou vertical
  3. Especifique o número de pixels
  4. Repita o procedimento para outro guia horizontal ou vertical (você também pode fazer mais guias para especificar largura e altura)

Como alternativa, você também pode criar as guias arrastando das réguas:

  1. Arraste para baixo (a partir da régua superior) um guia para a coordenada Y desejada.
  2. Arraste para baixo (a partir da régua esquerda) um guia para a coordenada X desejada.

B) Etapa 2 - Mova a tela

Você pode usar a ferramenta móvel.

  1. Selecione sua Camada
  2. Vá para Ferramentas -> Ferramentas de transformação -> Mover
  3. Arraste a camada para as guias. O Gimp lhe dará uma mão com os pixels exatos.

Um dos princípios de design é que você deve alinhar as coisas em todo o projeto. Reduzir o número de alinhamentos (guias) ajuda a obter um design mais limpo. Eu acho que é por isso que o gimp não inclui uma ferramenta para especificar as coordenadas exatas. Se você deseja seguir esse princípio de design, especificar as coordenadas exatas, uma a uma, se torna apenas um trabalho tedioso.

toto_tico
fonte
Exatamente o que eu preciso - obrigado. Caso de uso: criando um papel de parede para configuração de cabeça dupla a partir de dois outros papéis de parede. :)
smbear
22
  1. Pick insira a descrição da imagem aqui(ferramenta de alinhamento).
  2. Faça isso Relative to Image.
  3. Clique na sua camada (na tela).
  4. Digite X no Offsetcampo.
  5. Clique em Distribute/ insira a descrição da imagem aqui(seta esquerda).
  6. Digite Y no Offsetcampo.
  7. Clique em Distribute/ insira a descrição da imagem aqui(seta para cima).

É isso aí!

David
fonte
11
Este trabalho para deslocamento negativo.
Loda
11
Observe que parece que você só pode selecionar a camada visível superior - ou seja, é preciso ocultar as camadas na parte superior da camada para alinhar (gimp 2.8.16).
Skippy le Grand Gourou
Isso usa a unidade de pixels? Parece mover minha imagem muito mais do que eu esperaria.
palswim
@palswim Para mim, funcionou quando cliquei no grupo superior de botões (Alinhar) em vez do grupo inferior (Distribuir). Sim, é medido em pixels (pelo menos na minha configuração).
Rodrigo
20

Há um script para fazer isso que pode ser baixado do registro do GIMP Plugin. É chamado:

Mover camada para (download) .

Para instalar:

  1. Mova o script para o %USERPROFILE\.gimp-2.8\scriptsdiretório no Windows, ~/Library/Application Support/GIMP/2.8/scriptsno OS X ou ~/.gimp-2.8/scriptsno Linux. ( Instruções oficiais )

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

  3. O novo item de menu aparecerá na parte inferior do Layermenu Move to.

garyb
fonte
Ótima primeira resposta!
SLM
Quase perfeito! Seria bom se o diálogo de parâmetro usasse as coordenadas atuais da camada como os valores padrão.
Oliver Giesen
4
Você precisa fazer o download do arquivo .scm e colocá-lo %USERPROFILE%\.gimp-2.8\scriptsno Windows, depois faça Filters-> Script-Fu-> Refresh Scriptse ele estará disponível como o item mais inferior Layer->Move To
DarkWalker
3
A resposta de Davids faz o trabalho sem um script.
Michael S.
11
NÃO funciona para deslocamento negativo. e o UX é ruim (não mantenha o último valor, etc.).
Loda
11

Estou usando o GIMP 2.6.11.

Com essas linhas do Python, a camada ativa pode ser movida para uma posição absoluta, como (32, 64), no console do 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)

Como alternativa, se você deseja mover apenas o conteúdo da camada:

clique com o botão direito do mouse, Camada> Transformar> Deslocamento

ou Shft + Ctrl + O

Nicolas Kaiser
fonte
11
Isso faz com que os pixels dentro da camada se movam, em vez da própria camada - eu preciso mover a camada real. O que você sugeriu pode funcionar se a camada tiver o mesmo tamanho da tela ou, pelo menos, grande o suficiente para não cortar pixels não transparentes na camada.
7117 Scott
@ Scott: Entendo, desculpe não ter encontrado uma maneira mais fácil, mas pelo menos eu descobri como mover a camada para uma posição absoluta com algumas linhas de Python.
Nicolas Kaiser
2
A linha três do seu código deve ser img=gimp.image_list()[0]. O _ não funcionou para mim.
apple16
3

Existe uma maneira muito conveniente de fazer isso disponível desde o Gimp v.2.10:

  1. clique duas vezes na camada que deseja mover (ou clique com o botão direito do mouse e selecione "Editar atributos da camada")

  2. a caixa de diálogo "Editar atributos da camada" será exibida e você poderá alterar os deslocamentos X / Y conforme suas necessidades

Simplesmente fácil assim! :)

Editar atributos de deslocamentos X / Y da camada

EDITAR:

Como o @Michael perguntou sobre isso em seu comentário à minha resposta, estou adicionando um script que moverá TODAS as camadas de imagem por deslocamentos x, y especificados.

Para fazê-lo funcionar, você precisa criar um arquivo na pasta de scripts Gimp (alguma referência para isso, se precisar: aquiou aqui) com o seguinte conteúdo:

; 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 você fizer certo, encontrará um novo comando no menu "Camada" chamado "Mover todas as camadas ...", inicie-o e uma caixa de diálogo será exibida, permitindo que você decida as compensações X e Y. É isso aí.

danicotra
fonte
Alguma maneira de tornar isso um pouco mais rápido quando você tem muitas camadas para mover (como em centenas)? Seria ótimo se essa coisa pudesse atracar para que eu não precisasse trazê-la para todas as camadas!
Michael
11
@ Michael: Bem, acho que você deveria usar algum script nesse caso, como a solução sugerida por Nicolas Kaiser, mas repetindo as camadas da imagem ... Acabei de editar minha resposta para mostrar como, dê uma olhada. (Eu teria feito uma resposta separada, mas o OP pediu especificamente para mover UMA camada, não todas. Se você fizer uma nova pergunta, ficarei feliz em responder adicionando algumas sessões de tela e todo o resto; D) Cheers
danicotra