Pindahkan layer ke posisi X, Y tertentu di Gimp

58

Bagaimana cara memindahkan layer ke posisi XY tertentu dalam kanvas di Gimp?

Saat ini, satu-satunya cara yang bisa saya temukan adalah hanya melihatnya dengan panduan dan / atau posisi mouse. Saya ingin menentukan koordinat X dan Y yang tepat.

Scott
sumber
Saya ingin tahu ini juga, atau bagaimana cara melakukannya di Photoshop. Saya mengajukan pertanyaan untuk itu. superuser.com/questions/345669/…
Jonny
1
Sepertinya tidak (mudah) mungkin di GIMP tanpa menggunakan kode Python seperti yang dijelaskan di bawah ini: graphicdesign.stackexchange.com/a/6813/8841
SabreWolfy
Ya itu mungkin. Baca jawabanku.
David

Jawaban:

31

Saya khawatir Gimp tidak memasukkannya karena membosankan. Ini bukan cara yang tepat untuk menyelaraskan elemen ketika Anda mendesain, meskipun saya menyadari bahwa kadang-kadang berguna sebagai jalan pintas. Bagaimanapun, pendekatan terbaik (benar) adalah dengan panduan:


A) Langkah 1 - Buat panduan

  1. Pergi ke Image-> Guide-> New Guide
  2. Tentukan jika Anda ingin dan panduan horisontal atau vertikal
  3. Tentukan jumlah piksel
  4. Ulangi prosedur untuk Panduan horizontal atau vertikal lainnya (Anda juga dapat melakukan lebih banyak panduan untuk menentukan lebar dan tinggi)

Atau, Anda juga dapat membuat panduan yang diseret dari penggaris:

  1. Seret ke bawah (mulai dari penggaris atas) panduan ke koordinat Y yang Anda inginkan.
  2. Seret ke bawah (mulai dari penggaris kiri) panduan ke koordinat X yang Anda inginkan.

B) Langkah 2 - Pindahkan kanvas

Anda dapat menggunakan alat bergerak.

  1. Pilih Layer Anda
  2. Pergi ke Alat -> Transform Alat -> Pindahkan
  3. Seret Layer ke panduan. Gimp akan membantu Anda dengan piksel yang tepat.

Salah satu prinsip desain adalah Anda harus menyelaraskan seluruh proyek Anda. Mengurangi jumlah pelurusan (panduan) membantu Anda mendapatkan desain yang lebih bersih. Saya pikir ini sebabnya mengapa gimp tidak menyertakan alat untuk menentukan koordinat yang tepat. Jika Anda ingin mengikuti prinsip desain ini, menentukan koordinat yang tepat satu per satu menjadi pekerjaan yang membosankan.

toto_tico
sumber
Persis apa yang saya butuhkan - terima kasih. Use case: membuat wallpaper untuk pengaturan dua kepala dari dua wallpaper lainnya. :)
smbear
22
  1. Pilih masukkan deskripsi gambar di sini(alat pelurusan).
  2. Buat itu Relative to Image.
  3. Klik pada layer Anda (di kanvas).
  4. Masukkan X di Offsetbidang.
  5. Klik pada Distribute/ masukkan deskripsi gambar di sini(panah kiri).
  6. Masukkan Y di Offsetbidang.
  7. Klik pada Distribute/ masukkan deskripsi gambar di sini(panah atas).

Itu dia!

David
sumber
1
Ini bekerja untuk offset negatif.
Loda
1
Perhatikan bahwa tampaknya Anda hanya dapat memilih layer yang terlihat paling atas - yaitu, seseorang harus menyembunyikan layer di atas layer yang akan diluruskan (gimp 2.8.16).
Skippy le Grand Gourou
Apakah ini menggunakan satuan piksel? Tampaknya untuk memindahkan gambar saya jauh lebih daripada yang saya harapkan.
palswim
@ palswim Bagi saya ini berhasil ketika saya mengklik grup tombol paling atas (Rata) daripada grup paling bawah (Distribusikan). Ya, diukur dalam piksel (setidaknya dalam konfigurasi saya).
Rodrigo
20

Ada skrip untuk melakukan ini yang dapat diunduh dari registri Plugin GIMP. Itu disebut:

Pindahkan Lapisan Ke (unduh) .

Untuk memasang:

  1. Pindahkan skrip ke %USERPROFILE\.gimp-2.8\scriptsdirektori di Windows, ~/Library/Application Support/GIMP/2.8/scriptsdi OS X atau ~/.gimp-2.8/scriptsdi Linux. ( Instruksi resmi )

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

  3. Item menu baru akan muncul di bagian bawah Layermenu Move to.

Garyb
sumber
Jawaban pertama yang bagus!
slm
Hampir sempurna! Akan lebih baik jika dialog parameter menggunakan koordinat layer saat ini sebagai nilai default.
Oliver Giesen
4
Anda perlu mengunduh file .scm itu dan memasukkannya ke %USERPROFILE%\.gimp-2.8\scriptsWindows, lalu lakukan Filters-> Script-Fu-> Refresh Scriptsdan itu akan tersedia sebagai item terbawah Layer->Move To
DarkWalker
3
Jawaban Davids melakukan pekerjaan tanpa naskah.
Michael S.
1
TIDAK bekerja untuk offset negatif. dan UX buruk (tidak menyimpan nilai terakhir, dll).
Loda
11

Saya menggunakan GIMP 2.6.11.

Dengan garis-garis Python ini, lapisan aktif dapat dipindahkan ke posisi absolut, seperti (32, 64), dari konsol 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)

Atau, jika Anda hanya ingin memindahkan konten layer:

klik kanan, Layer> Transform> Offset

atau Shft + Ctrl + O

Nicolas Kaiser
sumber
1
Ini menyebabkan piksel di dalam lapisan bergerak, bukan lapisan itu sendiri - saya perlu memindahkan lapisan yang sebenarnya. Apa yang Anda sarankan dapat berfungsi jika lapisannya memiliki ukuran yang sama dengan kanvas, atau setidaknya cukup besar untuk tidak memotong piksel yang tidak transparan di dalam lapisan.
Scott
@Scott: Saya mengerti - maaf saya tidak menemukan cara yang lebih mudah, tapi setidaknya saya menemukan cara untuk memindahkan layer ke posisi absolut dengan beberapa baris Python.
Nicolas Kaiser
2
Baris tiga dari kode Anda seharusnya img=gimp.image_list()[0]. _ Tidak bekerja untuk saya.
apple16
3

Ada cara yang sangat mudah untuk melakukan ini sejak Gimp v.2.10:

  1. klik dua kali pada layer yang ingin Anda pindahkan (atau klik kanan padanya dan pilih "Edit Attributes Layer")

  2. dialog "Edit Layer Attributes" akan muncul dan di sana Anda dapat mengubah offset X / Y sesuai kebutuhan Anda

Cukup mudah seperti itu! :)

Edit Atribut Lapisan X / Y

SUNTING:

Ketika @Michael bertanya tentang hal itu dalam komentarnya untuk jawaban saya, saya menambahkan skrip yang akan memindahkan SEMUA lapisan gambar dengan x, y offset yang ditentukan.

Untuk membuatnya berfungsi, Anda perlu membuat file di folder skrip Gimp (beberapa referensi untuk ini jika Anda membutuhkannya: siniatau sini) dengan konten berikut:

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

Jika Anda melakukannya dengan benar, Anda akan menemukan perintah baru di menu "Lapisan" yang disebut "Pindahkan semua lapisan ...", luncurkan dan sebuah dialog akan muncul memungkinkan Anda untuk menentukan offset X dan Y. Itu dia.

danicotra
sumber
Adakah cara untuk membuat ini sedikit lebih cepat ketika Anda memiliki banyak lapisan untuk dipindahkan (seperti dalam ratusan)? Akan lebih bagus jika benda ini bisa merapat jadi saya tidak harus membawanya ke setiap lapisan!
Michael
1
@Michael: Yah, saya kira Anda harus pergi dengan beberapa skrip dalam hal itu, mirip dengan Nicolas Kaiser menyarankan solusi tetapi mengulang pada lapisan gambar ... Saya baru saja mengedit jawaban saya untuk menunjukkan kepada Anda bagaimana, lihat. (Saya akan membuat jawaban terpisah untuk itu tetapi OP meminta secara khusus untuk memindahkan SATU lapisan, tidak semuanya. Jika Anda mengajukan pertanyaan baru untuk ini, saya akan dengan senang hati menjawab di sana menambahkan beberapa tangkapan layar dan yang lainnya; - D) Cheers
danicotra