Di chuyển một lớp đến vị trí X, Y cụ thể trong Gimp


58

Làm cách nào để di chuyển một lớp đến một vị trí XY cụ thể trong khung vẽ trong Gimp?

Hiện tại, cách duy nhất tôi có thể tìm thấy là chỉ nhìn nhãn cầu bằng hướng dẫn và / hoặc vị trí chuột. Tôi muốn chỉ định tọa độ X và Y chính xác.


Tôi cũng muốn biết điều này hoặc làm thế nào để làm điều đó trong Photoshop. Tôi đã đặt một câu hỏi cho điều đó. superuser.com/questions/345669/
Jonny

1
Dường như không được (dễ dàng) có thể có trong GIMP mà không sử dụng mã Python như chi tiết dưới đây: graphicdesign.stackexchange.com/a/6813/8841
SabreWolfy

Vâng, nó là có thể. Đọc câu trả lời của tôi.
David

Câu trả lời:


31

Tôi sợ rằng Gimp không bao gồm nó bởi vì nó tẻ nhạt. Nó đơn giản không phải là cách thích hợp để sắp xếp các yếu tố khi bạn thiết kế, mặc dù tôi nhận ra rằng đôi khi nó hữu ích như một cách rút gọn. Dù sao, cách tiếp cận (chính xác) tốt nhất là với hướng dẫn:


A) Bước 1 - Tạo hướng dẫn

  1. Chuyển đến Image-> Guide-> New Guide
  2. Chỉ định nếu bạn muốn và hướng dẫn ngang hoặc dọc
  3. Chỉ định số lượng pixel
  4. Lặp lại quy trình cho một Hướng dẫn ngang hoặc dọc khác (bạn cũng có thể thực hiện thêm các hướng dẫn để chỉ định chiều rộng và chiều cao)

Ngoài ra, bạn cũng có thể tạo các hướng dẫn kéo từ thước kẻ:

  1. Kéo xuống (bắt đầu từ thước trên cùng) một hướng dẫn đến tọa độ Y bạn muốn.
  2. Kéo xuống (bắt đầu từ thước bên trái) một hướng dẫn đến tọa độ X bạn muốn.

B) Bước 2 - Di chuyển khung vẽ

Bạn có thể sử dụng công cụ di chuyển.

  1. Chọn lớp của bạn
  2. Chuyển đến Công cụ -> Công cụ chuyển đổi -> Di chuyển
  3. Kéo Layer vào hướng dẫn. Gimp sẽ giúp bạn một tay với các pixel chính xác.

Một trong những nguyên tắc thiết kế là bạn nên có những thứ phù hợp trong toàn bộ dự án của bạn. Giảm số lượng sắp xếp (hướng dẫn) giúp bạn có được một thiết kế sạch hơn. Tôi nghĩ đây là lý do tại sao gimp không bao gồm một công cụ để xác định tọa độ chính xác. Nếu bạn muốn tuân theo nguyên tắc thiết kế này, việc chỉ định tọa độ chính xác từng cái một sẽ trở thành một công việc tẻ nhạt.


Chính xác những gì tôi cần - cảm ơn. Ca sử dụng: tạo hình nền cho thiết lập hai đầu từ hai hình nền khác. :)
smbear

22
  1. Chọn nhập mô tả hình ảnh ở đây(công cụ căn chỉnh).
  2. Làm cho nó Relative to Image.
  3. Nhấp vào lớp của bạn (trong khung vẽ).
  4. Nhập X vào Offsettrường.
  5. Bấm vào Distribute/ nhập mô tả hình ảnh ở đây(mũi tên trái).
  6. Nhập Y vào Offsettrường.
  7. Bấm vào Distribute/ nhập mô tả hình ảnh ở đây(mũi tên lên).

Đó là nó!


1
Công việc này cho bù âm.
Loda

1
Lưu ý rằng dường như bạn chỉ có thể chọn lớp hiển thị trên cùng - nghĩa là, người ta phải ẩn các lớp trên cùng của lớp để được căn chỉnh (gimp 2.8.16).
Skippy le Grand Gourou

Cái này có sử dụng đơn vị pixel không? Nó dường như di chuyển hình ảnh của tôi nhiều hơn tôi mong đợi.
palswim

@palswim Đối với tôi, nó hoạt động khi tôi nhấp vào nhóm nút trên cùng (Align) thay vì nhóm dưới cùng (Phân phối). Có, nó được đo bằng pixel (ít nhất là trong cấu hình của tôi).
Rodrigo

20

Có một tập lệnh để làm điều này có thể được tải xuống từ sổ đăng ký Plugin GIMP. Nó được gọi là:

Di chuyển lớp đến (tải xuống) .

Để cài đặt:

  1. Di chuyển tập lệnh vào %USERPROFILE\.gimp-2.8\scriptsthư mục trên Windows, ~/Library/Application Support/GIMP/2.8/scriptstrên OS X hoặc ~/.gimp-2.8/scriptstrên Linux. ( Hướng dẫn chính thức )

  2. Nhấp chuột Filters-> Script-Fu-> Refresh scripts.

  3. Mục menu mới sẽ xuất hiện ở dưới cùng của Layermenu Move to.


Câu trả lời đầu tiên tốt đẹp!
slm

Gân như hoan hảo! Sẽ rất tuyệt nếu hộp thoại tham số sử dụng tọa độ hiện tại của lớp làm giá trị mặc định.
Oliver Giesen

4
Bạn cần tải xuống tệp .scm đó và đưa nó vào %USERPROFILE%\.gimp-2.8\scriptsWindows, sau đó làm Filters-> Script-Fu-> Refresh Scriptsvà nó sẽ có sẵn dưới dạng mục dưới cùng nhất Layer->Move To
DarkWalker

3
Davids trả lời làm công việc mà không có một kịch bản.
Michael S.

1
KHÔNG làm việc cho bù âm. và UX kém (không giữ giá trị cuối cùng, v.v.).
Loda

11

Tôi đang sử dụng GIMP 2.6.11.

Với các dòng Python này, lớp hoạt động có thể được di chuyển đến một vị trí tuyệt đối, như (32, 64), từ bảng điều khiển 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)

Ngoài ra, nếu bạn chỉ muốn di chuyển nội dung của lớp:

nhấp chuột phải, Layer> Transform> Offset

hoặc Shft + Ctrl + O


1
Điều này làm cho các pixel trong lớp di chuyển, thay vì chính lớp đó - tôi cần di chuyển lớp thực tế. Những gì bạn đề xuất có thể hoạt động nếu lớp có cùng kích thước với khung vẽ hoặc ít nhất đủ lớn để không cắt bất kỳ pixel không trong suốt nào trong lớp.
Scott

@Scott: Tôi thấy - xin lỗi tôi đã không tìm thấy một cách dễ dàng hơn, nhưng ít nhất tôi đã tìm ra cách di chuyển lớp đến một vị trí tuyệt đối với một số dòng Python.
Nicolas Kaiser

2
Dòng ba của bạn nên được mã img=gimp.image_list()[0]. Các _ không làm việc cho tôi.
apple16

3

Có một cách rất thuận tiện để thực hiện việc này có sẵn kể từ Gimp v.2.10:

  1. nhấp đúp chuột vào lớp bạn muốn di chuyển (hoặc nhấp chuột phải vào lớp đó và chọn "Chỉnh sửa thuộc tính lớp")

  2. hộp thoại "Chỉnh sửa thuộc tính lớp" sẽ hiển thị và ở đó bạn có thể thay đổi các giá trị X / Y theo nhu cầu của bạn

Đơn giản là dễ dàng như thế! :)

Chỉnh sửa các thuộc tính Offset của lớp X / Y

BIÊN TẬP:

Như @Michael đã hỏi về nó trong phần bình luận cho câu trả lời của tôi, tôi đang thêm một tập lệnh sẽ di chuyển TẤT CẢ các lớp hình ảnh bằng cách bù x, y được chỉ định.

Để làm cho nó hoạt động, bạn cần tạo một tệp trong thư mục Gimp script (một số tài liệu tham khảo cho điều này nếu bạn cần nó: đâyhoặc đây) với nội dung sau:

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

Nếu bạn làm đúng, bạn sẽ tìm thấy một lệnh mới trong menu "Lớp" có tên là "Di chuyển tất cả các lớp ...", khởi chạy nó và một hộp thoại sẽ hiển thị cho phép bạn quyết định độ lệch X và Y. Đó là nó.


Bất kỳ cách nào để làm điều này nhanh hơn một chút khi bạn có nhiều lớp để di chuyển (như trong hàng trăm)? Sẽ thật tuyệt nếu thứ này có thể cập bến vì vậy tôi đã không phải mang nó lên cho mọi lớp!
Michael

1
@Michael: Chà, tôi đoán bạn nên đi với một số kịch bản trong trường hợp đó, tương tự như giải pháp đề xuất của Nicolas Kaiser nhưng lặp lại trên các lớp hình ảnh ... Tôi chỉ chỉnh sửa câu trả lời của mình để cho bạn thấy, hãy xem. (Tôi đã có một câu trả lời riêng cho nó nhưng OP đã hỏi cụ thể về việc di chuyển MỘT lớp, không phải tất cả trong số họ. Nếu bạn hỏi một câu hỏi mới cho điều này, tôi rất vui lòng trả lời có thêm một số ảnh chụp màn hình và tất cả phần còn lại; - D) Chúc mừng
danicotra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.