ฉันจะย้ายเลเยอร์ไปยังตำแหน่ง XY เฉพาะภายในผืนผ้าใบใน Gimp ได้อย่างไร
ขณะนี้วิธีเดียวที่ฉันสามารถค้นหาได้คือการใช้ลูกตาด้วยไกด์และ / หรือตำแหน่งเมาส์ ฉันต้องการระบุพิกัด X และ Y ที่แน่นอน
ฉันจะย้ายเลเยอร์ไปยังตำแหน่ง XY เฉพาะภายในผืนผ้าใบใน Gimp ได้อย่างไร
ขณะนี้วิธีเดียวที่ฉันสามารถค้นหาได้คือการใช้ลูกตาด้วยไกด์และ / หรือตำแหน่งเมาส์ ฉันต้องการระบุพิกัด X และ Y ที่แน่นอน
คำตอบ:
ฉันกลัวว่า Gimp จะไม่รวมเพราะน่าเบื่อ มันไม่ใช่วิธีการจัดองค์ประกอบที่เหมาะสมเมื่อคุณออกแบบถึงแม้ว่าฉันจะรู้ว่าบางครั้งมันมีประโยชน์ในฐานะทางลัด อย่างไรก็ตามวิธีที่ดีที่สุด (ถูกต้อง) อยู่กับคู่มือ:
A) ขั้นตอนที่ 1 - สร้างคำแนะนำ
นอกจากนี้คุณยังสามารถสร้างคำแนะนำการลากจากผู้ปกครอง:
B) ขั้นตอนที่ 2 - ย้ายผืนผ้าใบ
คุณสามารถใช้เครื่องมือย้าย
หนึ่งในหลักการออกแบบคือคุณควรให้สิ่งต่าง ๆ สอดคล้องกันในโครงการทั้งหมดของคุณ การลดจำนวนการจัดแนว (คำแนะนำ) ช่วยให้คุณได้รับการออกแบบที่สะอาดยิ่งขึ้น ฉันคิดว่านี่เป็นสาเหตุที่ gimp ไม่ได้รวมเครื่องมือในการระบุพิกัดที่แน่นอน หากคุณต้องการทำตามหลักการออกแบบนี้การระบุพิกัดที่แน่นอนทีละคนกลายเป็นเพียงแรงงานที่น่าเบื่อ
Relative to
Image
ทำให้มันOffset
ฟิลด์Distribute
/ (ลูกศรซ้าย)Offset
ฟิลด์Distribute
/ (ลูกศรขึ้น)แค่นั้นแหละ!
มีสคริปต์ในการทำเช่นนี้ที่สามารถดาวน์โหลดได้จากรีจิสทรีปลั๊กอิน GIMP มันถูกเรียกว่า:
ย้ายชั้น (ดาวน์โหลด)
ย้ายสคริปต์ไปยัง%USERPROFILE\.gimp-2.8\scripts
ไดเรกทอรีบน Windows ~/Library/Application Support/GIMP/2.8/scripts
บน OS X หรือ~/.gimp-2.8/scripts
บน Linux ( คำแนะนำอย่างเป็นทางการ )
คลิกFilters
-> ->Script-Fu
Refresh scripts
รายการเมนูใหม่จะปรากฏขึ้นที่ด้านล่างของเมนูLayer
Move to
%USERPROFILE%\.gimp-2.8\scripts
ใน Windows จากนั้นทำFilters
-> Script-Fu
-> Refresh Scripts
และจะสามารถใช้งานได้ตามรายการด้านล่างLayer
->Move To
ฉันใช้ GIMP 2.6.11
ด้วยบรรทัดของ Python เหล่านี้เลเยอร์ที่ใช้งานอยู่สามารถย้ายไปยังตำแหน่งสัมบูรณ์เช่น (32, 64) จากคอนโซล 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)
หรือถ้าคุณต้องการย้ายเนื้อหาของเลเยอร์:
คลิกขวา, เลเยอร์> แปลง> ออฟเซ็ต
หรือ Shft + Ctrl + O
img=gimp.image_list()[0]
สามบรรทัดของรหัสที่คุณควรจะเป็น _ ไม่ทำงานสำหรับฉัน
มีวิธีที่สะดวกมากในการทำสิ่งนี้ตั้งแต่ Gimp v.2.10:
ดับเบิลคลิกที่เลเยอร์ที่คุณต้องการย้าย (หรือคลิกขวาที่เลเยอร์แล้วเลือก "แก้ไขคุณสมบัติของเลเยอร์")
กล่องโต้ตอบ "แก้ไขเลเยอร์คุณลักษณะ" จะปรากฏขึ้นและคุณสามารถเปลี่ยนการชดเชย X / Y ตามความต้องการของคุณได้
ง่าย ๆ อย่างนั้น! :)
แก้ไข:
เมื่อ @Michael ถามเกี่ยวกับความคิดเห็นในคำตอบของฉันฉันกำลังเพิ่มสคริปต์ที่จะย้ายเลเยอร์ภาพทั้งหมดตามที่ระบุ x, y offsets
เพื่อให้มันใช้งานได้คุณต้องสร้างไฟล์ในโฟลเดอร์สคริปต์ Gimp (มีการอ้างอิงบางอย่างถ้าคุณต้องการ: หรือ) ด้วยเนื้อหาต่อไปนี้:
; 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/")
หากคุณทำถูกต้องคุณจะพบคำสั่งใหม่ในเมนู "เลเยอร์" ชื่อ "ย้ายเลเยอร์ทั้งหมด ... " เรียกใช้งานและกล่องโต้ตอบจะปรากฏขึ้นเพื่อให้คุณสามารถตัดสินใจเลือก X และ Y ออฟเซ็ต แค่นั้นแหละ.