एक लेयर को Gimp में विशिष्ट X, Y स्थिति में ले जाएँ


58

मैं Gimp में कैनवास के भीतर एक विशिष्ट XY स्थिति में एक परत को कैसे स्थानांतरित करूं?

वर्तमान में, एक ही रास्ता मुझे मिल सकता है वह सिर्फ गाइड और / या माउस की स्थिति के साथ इसे नेत्रगोलक करना है। मैं सटीक X और Y निर्देशांक निर्दिष्ट करना चाहता हूं।


मैं यह भी जानना चाहता हूं, या फ़ोटोशॉप में इसे कैसे करना है। मैंने उसके लिए एक सवाल किया। superuser.com/questions/345669/…
जॉनी

1
नीचे दिए गए विवरण के रूप में GIMP में अजगर कोड का उपयोग किए बिना होने के लिए (आसानी से) संभव प्रतीत नहीं होता: graphicdesign.stackexchange.com/a/6813/8841
SabreWolfy

हाँ यह संभव है। मेरा जवाब पढ़ें।
डेविड

जवाबों:


31

मुझे डर है कि जिम्प इसमें शामिल नहीं है क्योंकि यह थकाऊ है। जब आप डिजाइन कर रहे हैं तो तत्वों को संरेखित करने का यह उचित तरीका नहीं है, हालांकि मैं मानता हूं कि कभी-कभी यह शॉर्ट-कट के रूप में उपयोगी होता है। वैसे भी, गाइड के साथ सबसे अच्छा (सही) दृष्टिकोण है:


ए) चरण 1 - गाइड बनाएं

  1. Image-> गाइड-> नई गाइड पर जाएं
  2. यदि आप चाहते हैं और क्षैतिज या ऊर्ध्वाधर गाइड निर्दिष्ट करें
  3. पिक्सेल की संख्या निर्दिष्ट करें
  4. किसी अन्य क्षैतिज या ऊर्ध्वाधर मार्गदर्शिका के लिए प्रक्रिया को दोहराएं (आप चौड़ाई और ऊंचाई को निर्दिष्ट करने के लिए अधिक मार्गदर्शक भी कर सकते हैं)

वैकल्पिक रूप से, आप शासकों से खींचने वाले गाइड भी बना सकते हैं:

  1. नीचे खींचें (शीर्ष शासक से शुरू) आप चाहते हैं Y समन्वय के लिए एक गाइड।
  2. नीचे खींचें (बाएं शासक से शुरू) आप चाहते हैं एक्स समन्वय के लिए एक गाइड।

बी) चरण 2 - कैनवास को स्थानांतरित करें

आप मूविंग टूल का उपयोग कर सकते हैं।

  1. अपनी परत का चयन करें
  2. टूल्स -> ट्रांसफॉर्म टूल्स -> मूव करें
  3. गाइड के लिए परत खींचें। जिम्प आपको सटीक पिक्सल के साथ एक हाथ देगा।

डिजाइन सिद्धांत में से एक यह है कि आपके पास अपने पूरे प्रोजेक्ट में चीजें संरेखित होनी चाहिए। संरेखण (गाइड) की संख्या को कम करने से आपको एक क्लीनर डिज़ाइन प्राप्त करने में मदद मिलती है। मुझे लगता है यही कारण है कि जिम्प में सटीक निर्देशांक निर्दिष्ट करने के लिए एक उपकरण शामिल नहीं है। यदि आप इस डिजाइन सिद्धांत का पालन करना चाहते हैं, तो सटीक निर्देशांक एक-एक करके केवल एक कठिन श्रम बन जाता है।


वास्तव में मुझे क्या चाहिए - धन्यवाद मामले का उपयोग करें: दो अन्य वॉलपेपर से दोहरे-सिर सेटअप के लिए एक वॉलपेपर बनाना। :)
११

22
  1. पिक यहाँ छवि विवरण दर्ज करें(संरेखण उपकरण)।
  2. बना लो Relative to Image
  3. अपनी परत (कैनवास में) पर क्लिक करें।
  4. Offsetफ़ील्ड में X दर्ज करें ।
  5. Distribute/ यहाँ छवि विवरण दर्ज करें(बायाँ तीर) पर क्लिक करें ।
  6. Offsetमैदान में Y दर्ज करें ।
  7. Distribute/ यहाँ छवि विवरण दर्ज करें(ऊपर तीर) पर क्लिक करें ।

बस!


1
यह नकारात्मक ऑफसेट के लिए काम करता है।
Loda

1
ध्यान दें कि ऐसा लगता है कि आप केवल शीर्ष दृश्यमान परत का चयन कर सकते हैं - अर्थात, परत के शीर्ष पर परतों को संरेखित करने के लिए छिपाना होगा (जिम्प 2.8.16)।
स्किपी ले ग्रैंड गौरौ

क्या यह पिक्सल की इकाई का उपयोग करता है? यह मेरी छवि को मेरी अपेक्षा से कहीं अधिक ले जाता है।
पालसीम

@palswim मेरे लिए यह तब काम आया जब मैंने नीचे के समूह (वितरित) के बजाय शीर्ष समूह (Align) बटन पर क्लिक किया। हां, यह पिक्सेल में मापा जाता है (कम से कम मेरे कॉन्फ़िगरेशन में)।
रोड्रिगो

20

ऐसा करने के लिए एक स्क्रिप्ट है जिसे GIMP प्लगइन रजिस्ट्री से डाउनलोड किया जा सकता है। यह कहा जाता है:

लेयर टू (डाउनलोड) को स्थानांतरित करें

स्थापित करने के लिए:

  1. %USERPROFILE\.gimp-2.8\scriptsविंडोज पर निर्देशिका पर, ~/Library/Application Support/GIMP/2.8/scriptsओएस एक्स ~/.gimp-2.8/scriptsपर या लिनक्स पर स्क्रिप्ट को स्थानांतरित करें । ( आधिकारिक निर्देश )

  2. क्लिक Filters-> Script-Fu-> Refresh scripts

  3. नए मेनू आइटम के नीचे दिखाई देगा Layerमेनू Move to


अच्छा पहला जवाब!
स्लम

लगभग आदर्श! अच्छा होगा यदि पैरामीटर संवाद परत के वर्तमान निर्देशांक को डिफ़ॉल्ट मान के रूप में उपयोग करता है।
ओलिवर गिसेन

4
आपको उस .scm फ़ाइल को डाउनलोड %USERPROFILE%\.gimp-2.8\scriptsकरना होगा और उसे विंडोज पर डालना होगा , फिर करें Filters-> Script-Fu-> Refresh Scriptsऔर यह सबसे नीचे की तरह उपलब्ध होगा Layer->Move To
DarkWalker

3
डेविड का जवाब बिना स्क्रिप्ट के काम करता है।
माइकल एस।

1
नकारात्मक ऑफसेट के लिए काम नहीं करता है। और UX खराब है (अंतिम मान आदि को न रखें)।
Loda

11

मैं GIMP 2.6.11 का उपयोग कर रहा हूं।

अजगर की इन पंक्तियों के साथ सक्रिय परत को पूर्ण स्थिति में ले जाया जा सकता है, जैसे (32, 64), पायथन से:

>>> 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


1
यह परत के भीतर की परत के बजाय पिक्सेल को ले जाने का कारण बनता है - मुझे वास्तविक परत को स्थानांतरित करने की आवश्यकता है। आपने जो सुझाव दिया है वह कार्य कर सकता है यदि परत कैनवास के समान आकार की है, या कम से कम इतनी बड़ी है कि परत के भीतर किसी भी गैर-पारदर्शी पिक्सेल को क्लिप न करें।
स्कॉट

@ कोट: मैं देख रहा हूँ - माफ करना, मुझे एक आसान तरीका नहीं मिला, लेकिन कम से कम मुझे लगा कि पायथन की कुछ लाइनों के साथ परत को एक पूर्ण स्थिति में कैसे स्थानांतरित किया जाए।
निकोलस कैसर

2
आप में से तीन लाइन कोड होना चाहिए img=gimp.image_list()[0]। _ मेरे लिए काम नहीं किया।
2116 बजे Apple16

3

Gimp v.2.10 के बाद से यह उपलब्ध करने का एक बहुत ही सुविधाजनक तरीका है:

  1. उस लेयर पर डबल क्लिक करें जिसे आप स्थानांतरित करना चाहते हैं (या उस पर राइट क्लिक करें और "एडिट लेयर्स एट्रिब्यूट्स" का चयन करें)

  2. "एडिट लेयर एट्रिब्यूट्स" संवाद दिखाई देगा और वहां आप अपनी आवश्यकताओं के लिए एक्स / वाई ऑफसेट बदल सकते हैं

बस इतना आसान है! :)

परत X / Y ऑफसेट गुण संपादित करें

संपादित करें:

जैसा कि @Michael ने अपने जवाब में इसके बारे में मुझसे पूछा था, मैं एक स्क्रिप्ट जोड़ रहा हूं, जो सभी इमेज लेयर्स को निर्दिष्ट x, y offets द्वारा स्थानांतरित कर देगी।

इसे काम करने के लिए आपको जिम्प स्क्रिप्ट फ़ोल्डर में एक फ़ाइल बनाने की आवश्यकता है (इसके लिए कुछ संदर्भ यदि आपको इसकी आवश्यकता है: यहाँया यहाँनिम्नलिखित के साथ):

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

यदि आप इसे सही करते हैं, तो आपको "लेयर" मेनू में एक नया कमांड मिलेगा, जिसे "सभी लेयर्स ले जाएँ ..." कहा जाता है, इसे लॉन्च करें और एक डायल आपको एक्स और वाई ऑफ़सेट्स को तय करने देगा। बस।


किसी भी तरह से इसे जल्दी बनाने के लिए जब आपके पास ले जाने के लिए बहुत सी परतें हैं (जैसा कि सैकड़ों में)? यह बहुत अच्छा होगा अगर यह बात डॉक हो सकती है तो मुझे इसे हर परत के लिए लाने की जरूरत नहीं है!
माइकल

1
@ माइकल: ठीक है, मुझे लगता है कि आपको उस मामले में कुछ स्क्रिप्टिंग के साथ जाना चाहिए, इसी तरह निकोलस कैसर ने समाधान का सुझाव दिया था, लेकिन छवि परतों पर लूपिंग ... मैंने बस आपको दिखाने के लिए अपना जवाब संपादित किया कि, कैसे दिखते हैं। (मैंने इसके लिए एक अलग उत्तर दिया होगा, लेकिन ओपी ने विशेष रूप से वन लेयर को स्थानांतरित करने के लिए कहा, उन सभी को नहीं। यदि आप इसके लिए एक नया प्रश्न पूछते हैं तो मुझे खुशी होगी कि मुझे कुछ स्क्रीनशॉट और सभी बाकी जोड़कर जवाब देना होगा; - D) चीयर्स
दानिकोत्र
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.