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.
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
Vá para Imagem-> Guia-> Novo Guia
Especifique se deseja e guia horizontal ou vertical
Especifique o número de pixels
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:
Arraste para baixo (a partir da régua superior) um guia para a coordenada Y desejada.
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.
Selecione sua Camada
Vá para Ferramentas -> Ferramentas de transformação -> Mover
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.
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. :)
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:
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 )
Cliques Filters-> Script-Fu-> Refresh scripts.
O novo item de menu aparecerá na parte inferior do Layermenu Move to.
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:
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:
clique duas vezes na camada que deseja mover (ou clique com o botão direito do mouse e selecione "Editar atributos da camada")
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:
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: ou ) 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í.
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
Respostas:
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
Como alternativa, você também pode criar as guias arrastando das réguas:
B) Etapa 2 - Mova a tela
Você pode usar a ferramenta móvel.
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.
fonte
Relative to
Image
.Offset
campo.Distribute
/ (seta esquerda).Offset
campo.Distribute
/ (seta para cima).É isso aí!
fonte
Há um script para fazer isso que pode ser baixado do registro do GIMP Plugin. É chamado:
Mover camada para (download) .
Para instalar:
Mova o script para o
%USERPROFILE\.gimp-2.8\scripts
diretório no Windows,~/Library/Application Support/GIMP/2.8/scripts
no OS X ou~/.gimp-2.8/scripts
no Linux. ( Instruções oficiais )Cliques
Filters
->Script-Fu
->Refresh scripts
.O novo item de menu aparecerá na parte inferior do
Layer
menuMove to
.fonte
%USERPROFILE%\.gimp-2.8\scripts
no Windows, depois façaFilters
->Script-Fu
->Refresh Scripts
e ele estará disponível como o item mais inferiorLayer
->Move To
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:
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
fonte
img=gimp.image_list()[0]
. O _ não funcionou para mim.Existe uma maneira muito conveniente de fazer isso disponível desde o Gimp v.2.10:
clique duas vezes na camada que deseja mover (ou clique com o botão direito do mouse e selecione "Editar atributos da camada")
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:
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: ou ) com o seguinte conteúdo:
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í.
fonte