मैं अनुकूलन योग्य मार्जिन के साथ, एक विंडो से स्क्रीनशॉट कैसे ले सकता हूं


17

मुझे एक टूल की आवश्यकता है जो निम्न कार्य करेगा: एक विंडो का चयन, उस विंडो का स्क्रीनशॉट एक एक्स पैडिंग के साथ बनायेगा, जैसे कि निम्न इमेज में:

तो, ज्यादातर मामलों में x , y के बराबर होगा , लेकिन कभी-कभी मुझे अलग-अलग दूरी की आवश्यकता होती है।

ऐसे स्क्रीनशॉट को स्वचालित रूप से कैसे बनाया जाए? मैंने शटर के साथ प्रयास किया, लेकिन मुझे वहां ऐसी कोई सेटिंग नहीं मिली। हालाँकि, यह प्लगइन्स का समर्थन करता है। तो एक प्लगइन इस तरह से विंडो को क्रॉप कर सकता है।


क्या मैं पूछ सकता हूँ कि आपने कौन सा टूल बनाया था? यह काफी अच्छा लग रहा है :)
सेठ

1
@ सेठ इंकस्केप नियम! मैं एक विशेषज्ञ नहीं हूं, लेकिन मैं अपनी परियोजनाओं के लिए इस तरह से सामान बनाना पसंद करता हूं। यह आंखों के लिए अच्छा लगता है। :-) यहां पीएनजी संस्करण है , और एसवीजी एक हैइस रिपॉजिटरी में इंकस्केप के साथ बनाया गया अन्य सामान है।
इकोना बिज़ुआ 19

जवाबों:


19

स्क्रिप्ट, शटर का उपयोग करना

मुझे नहीं लगता कि यह मौजूद है, लेकिन कुछ भी, इसे बनाया जा सकता है।

यदि आप एक कुंजी संयोजन (नीचे स्पष्टीकरण आगे) के तहत नीचे स्क्रिप्ट उपलब्ध कराते हैं, तो एक विंडो पॉप अप होगी, जिससे आप अपने स्क्रीनशॉट को हाशिये पर बाईं, दाईं, ऊपर और नीचे , एक स्थान से अलग करके सेट कर सकते हैं:

यहां छवि विवरण दर्ज करें

परिणाम:

यहां छवि विवरण दर्ज करें

या:

यहां छवि विवरण दर्ज करें

परिणाम:

यहां छवि विवरण दर्ज करें

आदि।

मैंने डिफ़ॉल्ट को 30 px पर सेट किया है, लेकिन आप कोई भी डिफ़ॉल्ट मान (नीचे देखें) सेट कर सकते हैं।

कैसे इस्तेमाल करे

  • स्क्रिप्ट का उपयोग करता है Shutterऔर wmctrl। मान Shutterलेना आपके सिस्टम पर पहले से है (जब से आपने इसका उल्लेख किया है), स्थापित करें wmctrl:

    sudo apt-get install wmctrl
    

    NB यदि आप कुबंटू का उपयोग करते हैं , Zenityतो डिफ़ॉल्ट रूप से इंस्टॉल नहीं किया जाता है:

    sudo apt-get install zenity
    
  • नीचे दी गई स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें। यदि आप चाहते हैं कि आप स्क्रिप्ट की लाइन में "डिफ़ॉल्ट 'मर्ज को बदल सकते हैं:

    `arg =`
    
  • इसे सहेजें custom_screenshot.py

  • कुंजी शॉर्टकट संयोजन में स्क्रिप्ट जोड़ें: चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड जोड़ें:

    python3 /path/to/custom_screenshot.py
    

ध्यान दें

स्क्रिप्ट wmctrlविंडो की स्थिति निर्धारित करने के लिए उपयोग करती है। हालांकि अलग-अलग विंडो मैनेजरों पर, wmctrl -lGकमांड का आउटपुट विंडो के y- पोज़िशन में छोटे अंतर को दर्शाता है। ये अंतर deviation=स्क्रिप्ट के इनलाइन में निर्धारित मूल्य से समाप्त हो जाते हैं । वर्तमान में निर्धारित मान (0) एकता और KDE के लिए उपयुक्त है।

स्क्रिप्ट का परीक्षण भी किया जाता है, और ठीक काम करता है Xfceऔर Gnome, लेकिन मूल्य को तब बदलना पड़ता है, जैसा कि स्क्रिप्ट के मुख्य भाग में बताया गया है।

लिपी

#!/usr/bin/env python3
import subprocess
import time

"""
On different window managers, the window geometry as output of wmctrl differs slightly.
The "deviation" should compensate these differences. Most likely appropriate (tested) settings:
Unity: 0, Gnome: -36, Xfce (Xubuntu): -26, KDE (Kubuntu): 0
"""
#---
deviation = 0
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
try:
    arg = get('zenity --entry --entry-text "30 30 30 30" --text "border left, right, top, bottom" --title "Screenshot margins"').strip().split()
except:
    pass
else:
    time.sleep(0.5)
    # frontmost window pos
    frontmost = [l.split()[4] for l in get("xprop -root").splitlines() if "ACTIVE_WINDOW(WINDOW)" in l][0].replace(",", "")
    frontmost = frontmost[:2]+"0"+frontmost[2:]
    f_data = [l.split() for l in get("wmctrl -lG").splitlines() if frontmost in l][0][2:6]
    # extent
    xt_data = get("xprop -id "+frontmost).split()
    xt_i = xt_data.index("_NET_FRAME_EXTENTS(CARDINAL)")
    xt = [int(n.replace(",", "")) for n in xt_data[xt_i+2:xt_i+6]]
    # set data for screenshot command
    x = str(int(f_data[0])-int(arg[0])-xt[0])
    y = str(int(f_data[1])-int(arg[2])-xt[2]+deviation)
    w = str(int(f_data[2])+int(arg[0])+int(arg[1])+xt[0]+xt[1])
    h = str(int(f_data[3])+int(arg[3])+int(arg[2])+xt[2]+xt[3])

    command = "shutter -s="+(",").join([x,y,w,h])+" -e"
    subprocess.call(["/bin/bash", "-c", command])

3
मुझे नहीं लगता कि यह मौजूद है - अब यह मौजूद है! आपका बहुत बहुत धन्यवाद!
Ionică Bizău

1
@ IonicăBizău आपका स्वागत है! सवाल के लिए धन्यवाद, यह करने के लिए मजेदार था। मैंने डिफ़ॉल्ट सेटिंग स्पष्टीकरण पर एक छोटा सुधार किया।
जैकब व्लिजम

1
@ IonicăBizău (और तय) ज्यामिति में एक बग मिला।
जैकब व्लिजम

2
अच्छा अच्छा अच्छा! जब मैंने अपने एएसयूएस नोटबुक पर विशेष बटन दबाया तो मैंने इसे कॉमैंड के रूप में सेट किया। :-)
आयनॉकि बिज़ुउ

2

उपयोगकर्ता-निर्धारित आयामों के साथ किसी विशिष्ट क्षेत्र का स्क्रीन-शॉट लेने के लिए आप Shift और PrtScr बटन के संयोजन का उपयोग भी कर सकते हैं ।

बस संयोजन दबाएं और स्क्रीन-शॉट के लिए क्षेत्र चुनने के लिए संशोधित-कर्सर (यह एक प्लस चिह्न के समान हो जाता है) का उपयोग करें।


आमतौर पर, मैं इन हाशिये को ठीक से सेट करने के लिए अपने हाथों को नियंत्रित नहीं कर सकता। :-) लेकिन इस शॉर्टकट के लिए +1, मुझे नहीं पता था।
Ionică Bizău

2

आप scrotकमांड लाइन स्क्रीन कैप्चर उपयोगिता के साथ स्क्रीनशॉट ले सकते हैं :

scrot -s  

या

scrot -ub -d 5  

दूसरा कमांड चयनित विंडो के चारों ओर एक सीमा रखता है, जिसमें खिड़की के आकार के संबंध में एक अच्छी चौड़ाई है। -d 5विकल्प देरी के लिए खड़ा है और आप विंडो का चयन करने के स्क्रीनशॉट में होने की 5 सेकंड की देरी देता है।

इसके साथ स्थापित करें:

sudo apt-get install scrot

संदर्भ: उबंटू मैनुअल - स्क्रोट

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.