मैं स्क्रीन पर आयाम कैसे मापूं?


29

मेरे पास स्क्रीन पर एक छवि है, और मैं इसकी चौड़ाई को मापना चाहता हूं। बेशक मैं एक शासक का उपयोग कर सकता हूं , लेकिन यह सनकी और धीमा है। क्या कोई ऐसी चीज़ है जहाँ मैं एक शॉर्टकट कुंजी क्लिक कर सकता हूँ, एक क्षेत्र को खींच सकता हूँ, और यह मुझे उस क्षेत्र की ऊँचाई और चौड़ाई बताएगा?

पेज शासक के समान कुछGoogle Chrome के लिए ।

वर्तमान में, मैं Shift+ का उपयोग कर रहा हूं PrtScnऔर क्षेत्र को बाहर खींच रहा हूं , छवि को बचा रहा हूं , और फिर इसकी ऊंचाई और चौड़ाई का पता लगाने के लिए गुण में जा रहा हूं ।

जवाबों:


10

शटर का उपयोग करना

यदि आपने इसे स्थापित नहीं किया है तो पहले शटर को स्थापित करें।

sudo apt-get install shutter

एडिट -> प्राथमिकता के तहत वरीयताएँ खोलें और व्यवहार टैब चुनें।
'लॉगिन पर स्टार्ट शटर' और 'पहले लॉन्च पर विंडो छिपाएं' चेक करें। नीचे स्क्रीनशॉट देखें:

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

प्रयोग

  1. सुनिश्चित करें कि शटर पैनल आइकन दिखाई दे रहा है और अपनी खिड़की या जो भी आप मापना चाहते हैं उसका चयन करें।
  2. शटर आइकन पर क्लिक करें और 'चयन' चुनें।

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

  1. अपने शुरुआती बिंदु का चयन करें और अपने अंतिम बिंदु पर खींचें। आपके चयन को छोड़कर पूरी विंडो काला हो जाएगा। आप अधिक 'पॉइंट टू' परिणाम प्राप्त करने के लिए सीमाओं को चारों ओर घुमा सकते हैं।
  2. शटर चयन के साथ X और Y निर्देशांक और आकार (जो आप चाहते हैं) के साथ एक संवाद विंडो प्रदान करेगा। एक उदाहरण के ऊपरी-बाएँ कोने में नीचे स्क्रीनशॉट देखें।

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

  1. एक ज़ूम आउट स्क्रीनशॉट जो इसे 727px को 367px से दिखाता है:

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

  1. अंत में सिर्फ Escचयन को खारिज करने और शटर को छिपाने के लिए दबाएं ।
  2. आप जो भी कर रहे थे, उसके साथ जारी रखें।

बहुत साफ़! मुझे यहाँ क्रॉसहेयर फीचर पसंद है! बहुत पूर्ण रुप से प्रदर्शित - विंडो ले सकते हैं, चयन कर सकते हैं, देरी हो सकती है आदि
dayuloli

42

यह काम किस प्रकार करता है

नीचे दी गई स्क्रिप्ट माउस पॉइंटर के दो स्थानों के बीच एक क्षेत्र के आकार को मापती है।

यह निम्नानुसार काम करता है:

  1. माउस पॉइंटर को पहली स्थिति में रखें (बिना क्लिक किए)

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

  2. अपनी पसंद के प्रमुख संयोजन को दबाएं (नीचे देखें)

  3. माउस को दूसरी स्थिति में रखें (फिर बिना क्लिक किए)

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

  4. अपने कुंजी संयोजन को फिर से दबाएं। एक सूचना आपको क्षेत्र का सटीक आकार (px) बताएगी।

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

विकल्प

आप चुन सकते हैं (लाइनों में से किसी एक को अनइंस्टॉल करके) आप कैसे सूचित करना चाहते हैं; अधिसूचना द्वारा या तो:

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

या एक ज़ेनिटी जानकारी विंडो:

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

(उदाहरण विभिन्न क्षेत्रों से हैं)

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

  1. स्क्रिप्ट का उपयोग करता है xdotool:

    sudo apt-get install xdotool
    
  2. एक खाली फ़ाइल में नीचे दी गई स्क्रिप्ट को कॉपी करें, या तो लाइनों में से कोई एक:

    command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
    

    ( notify-sendविकल्प द्वारा अधिसूचित किया जाना है)

    या:

    command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
    

    के लिए Zenityविकल्प।

  3. स्क्रिप्ट को इसमें सहेजें ~/bin(आपको संभवतः निर्देशिका बनाना होगा) measure_area(कोई विस्तार नहीं) और इसे निष्पादन योग्य बनाएं

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

    measure_area
    

टिप्पणियाँ

  • आपको पहले / पहले लॉग आउट करना होगा
  • इससे कोई फ़र्क नहीं पड़ता कि आप पहले / दूसरे स्थान पर क्या लेते हैं; स्क्रिप्ट निरपेक्ष मूल्यों को मापता है।

लिपी

#!/usr/bin/env python3
import subprocess
import os
import math

home = os.environ["HOME"]
area = home+"/"+".measure_area.txt"

def get_pos():
    pos_data = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
    return [m[2:] for m in pos_data.split()[:2]]

def confirm():
    get = subprocess.check_output(["xrandr", "--verbose"]).decode("utf-8").split()
    for s in [get[i-1] for i in range(len(get)) if get[i] == "connected"]:
        br_data = float(get[get.index("Brightness:")+1])
        brightness = lambda br: ["xrandr", "--output", s, "--brightness", br]
        flash = ["sleep", "0.1"]
        for cmd in [brightness(str(br_data-0.1)), flash, brightness(str(br_data))]:
            subprocess.call(cmd)

if not os.path.exists(area):
    with open(area, "wt") as measure:
        measure.write(str(get_pos()))
    confirm()
else:
    second = get_pos()
    with open(area) as first_m:
        try:
            first = eval(first_m.read())
            w = int(math.fabs(int(second[0]) - int(first[0])))
            h = int(math.fabs(int(second[1]) - int(first[1])))
            #--- uncomment either one of the lines below:
            # command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
            command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
            #---
            confirm()
        except SyntaxError:
            text = "Please try again, there was an error in the data"
            command = ['zenity', '--info', '--title', 'Please try again', '--text', text]
        subprocess.Popen(command)
    os.remove(area)

व्याख्या

जब स्क्रिप्ट को पहली बार कहा जाता है, तो उसे xdotoolकमांड के साथ वर्तमान माउस पोजीशन मिलती है :

xdotool getmouselocation

यह तब स्थिति को एक (अदृश्य) फ़ाइल में बचाता है .measure_area.txt, दूसरी कॉल की प्रतीक्षा करता है।
दूसरी कॉल पर, यह फ़ाइल को पढ़ता है, इसे हटाता है और संग्रहीत x/yनिर्देशांक की नवीनतम लोगों से तुलना करता है, और उनके बीच के क्षेत्र के आकार की गणना करता है।

संपादित करें

कई सुधारों के साथ स्क्रिप्ट अद्यतित:

  • अनुकूलित subprocess.Popen()/subprocess.check_output() कमांड (@muru, @ ट्रेंगॉट के लिए धन्यवाद)
  • पहली-डेटा फ़ाइल के साथ कुछ गलत हो जाने की स्थिति में मरम्मत की प्रक्रिया को जोड़ा गया (जैसे यदि उपयोगकर्ता ने पहली बार बिना स्क्रिप्ट चलाने की कोशिश की xdotool )
  • जब पहला संयोजन के लिए कुंजी संयोजन दबाया जाता है, तो एक छोटा सा पुष्टि स्क्रीन मंद-फ्लैश जोड़ा जाता है। उपयोगकर्ता को किसी प्रकार की कार्रवाई की पुष्टि करने के लिए यह थोड़ा अधिक उपयोगकर्ता के अनुकूल लगता है ।

1
बहुत बढ़िया! अभी पूरी तरह से काम करता है, पूरी तरह से काम करता है! धन्यवाद! आप वास्तव में एक पदक के लायक हैं!
दिनुओली

2
@dayuloli प्रश्न के लिए धन्यवाद! मैं प्यार इस तरह काम करना।
जैकब व्लिजम

अच्छा! +1। जिज्ञासु: Popen(['/bin/bash',...इसके बजाय क्यों Popen(['zenity', '--info', ...?
मूरू

1
भावों से ओत-प्रोत? ऊ command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)बहुत कम के साथ चारों ओर खिलवाड़ की आवश्यकता है 'और ", मुझे लगता है।
मूरू

1
क्या उसी बदलाव के लिए किया जा सकता है xdotools? कुछ पसंद है check_output(['xdotools', 'getmouseposition'])?
होलोवे

2

ढलान का उपयोग करना

चयन का क्षेत्र निर्धारित करने का एक और सरल तरीका है slop(ऑपरेशन का चयन करें), एक कमांड-लाइन उपयोगिता "जो उपयोगकर्ता से चयन के लिए पूछताछ करता है और क्षेत्र को स्टडआउट करने के लिए प्रिंट करता है।"

slopएक नया उपकरण है और डेबियन / उबंटू के लिए अभी तक पैक नहीं किया गया है। जैसा कि यह खड़ा है आपको इसे स्रोत से संकलित करना होगा:

sudo apt-get install build-essential cmake libxext-dev
git clone https://github.com/naelstrof/slop.git
cd slop
cmake ./
make && sudo make install

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

eval $(slop -t 0 -b 1) && notify-send  "Selection info" "Area: ${W} x ${Y}px \n Position: X = ${X}px, Y = ${Y}px" && echo ${W}x${H} | xsel -bi

स्क्रीनशॉट:

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

उपयोग किए गए आदेशों का एक त्वरित ब्रेकडाउन:

  • slop -t 0 -b 1- स्क्रीन क्षेत्र का चयन करने के लिए उपयोगकर्ता को संकेत दें; पूर्ण विंडो का चयन न करें ( -t 0), चयन सीमा 1px ( -b 1) पर सेट करें
  • eval $(...)- slopचर में आउटपुट पढ़ें
  • notify-send ... - चयनित क्षेत्र की जानकारी के साथ जीयूआई अधिसूचना भेजें
  • echo ${W}x${H} | xsel -bi- क्लिपबोर्ड पर कॉपी आयाम (आवश्यकता xselsudo apt-get install xsel)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.