क्या एक गोलाकार चयनित क्षेत्र का स्क्रीनशॉट लेना संभव है?


10

जब हम चयनित क्षेत्रों के स्क्रीनशॉट लेते हैं Ubuntu( Shift+ Prt Scrया Ctrl+ Shift+ का उपयोग करके Prt Scr) हम हमेशा एक आयताकार क्षेत्र का चयन करते हैं । तो, मुझे पता है कि मैं सिर्फ आयताकार जैसे कुछ सॉफ्टवेयर पर छवि को संपादित कर सकता हूं आयताकार छवि के साथ एक सर्कल बनाने के लिए, लेकिन मैं यह जानना चाहूंगा कि क्या कोई कॉन्फ़िगरेशन है जो मैं विभिन्न प्रकार के आकार (मुख्य रूप से मंडलियों) का चयन करने में सक्षम होने के लिए बदल सकता हूं ) सीधे जब मैं स्क्रीनशॉट ले रहा हूं।

क्या यह संभव है?


1
यह निश्चित रूप से असंभव होगा कि सर्कल का आकार क्या होगा और यह किस स्थिति में होगा। प्रिंट स्क्रीन या तो पूरी स्क्रीन (आयत) या वर्तमान में सक्रिय विंडो (आयत) को प्रिंट करती है
Broadsworde

वास्तव में, जब हम Shift + PrintScreen या Ctrl + Shift + PrintScreen का उपयोग करते हैं, तो हम स्क्रीन को पहले से ही एक आयताकार चयनित क्षेत्र में प्रिंट कर सकते हैं ... मैं Ubuntu 16.04 का उपयोग कर रहा हूं, मैं बस इस आयताकार आकार को बदलना चाहता हूं जो एक परिपत्र के लिए डिफ़ॉल्ट के रूप में आता है ।
राफेल म्युनार्स्क

Org / gnome / gnome-स्क्रीनशॉट के लिए dconf एडिटर के माध्यम से उपलब्ध सेटिंग्स हैं: ऑटो-सेव-डायरेक्टरी, बॉर्डर-इफेक्ट, डिफॉल्ट-फाइल-टाइप, डिले, बॉर्डर-इन्क्लूड-प्रोफाइल, शामिल-पॉइंटर, लास्ट सेव-डाइरेक्टरी, टेक-विंडो-शॉट (ड्रीप्ड)। आकृति सेटिंग के रूप में मौजूद नहीं है।
ब्रॉडस्वॉर्ड

1
@Broadsworde ksnapshop ऐसा क्यों नहीं हो सकता;) इसमें सबसे अजीब आकार बनाने के लिए "फ्री हैंड" है; एक चक्र बनाने हालांकि ... कितना अच्छा एक Ramuyko बनाने में आप कर रहे हैं;)
Rinzwind

@Ramuyko मेरे पास एक और विचार था कि मैं सामान्य आयताकार स्क्रीनशॉट का उपयोग करूं और उसमें से सबसे बड़ा संभव सर्कल काट दूं, इस तरह से आप उस क्षेत्र का चयन कर सकते हैं जैसा आप उपयोग कर रहे हैं। क्या आप इस दृष्टिकोण में भी रुचि रखते हैं?
मिठाई

जवाबों:


9

मैंने परिपत्र स्क्रीनशॉट के लिए एक छोटी स्क्रिप्ट को एक साथ रखा है, आपको निम्नलिखित पैकेजों की आवश्यकता है (हालांकि यह अन्य स्क्रीनशॉट प्रोग्राम और टर्मिनल एमुलेटर के लिए अनुकूल है):

sudo apt install xdotool gnome-screenshot imagemagick xterm

लिपी

#!/bin/bash

output=~/$(date +%F_%H%M%S).png
temp_screenshot=$(mktemp).png

read -p "Move cursor to center and press Enter"
eval $(xdotool getmouselocation --shell)
x_center=$X
y_center=$Y
read -p "Move cursor to edge and press Enter"
eval $(xdotool getmouselocation --shell)

gnome-screenshot -f $temp_screenshot

radius=$(bc <<<"sqrt(($X-$x_center)^2+($Y-$y_center)^2)")

convert $temp_screenshot -alpha on \( +clone -channel a -evaluate multiply 0 -draw "ellipse $x_center,$y_center $radius,$radius 0,360" \) -compose DstIn -composite -trim "$output"

इसे उदाहरण के रूप में सहेजें ~/circular_screenshot.bashऔर इसके साथ निष्पादन योग्य बनाएं chmod +x ~/circular_screenshot.bash। जब आप इसे चलाते हैं, तो स्क्रिप्ट पहले आपको माउस कर्सर को केंद्र की स्थिति में ले जाने के लिए कहती है Enterऔर फिर इसे एक किनारे की स्थिति में ले जाने के लिए कहती है (इससे कोई फर्क नहीं पड़ता, स्क्रिप्ट दूरी से त्रिज्या की गणना करती है) और फिर से दबाएं Enter। स्क्रीन तब फ़्लिकर होती है जब स्क्रीनशॉट लिया जाता है (मैं scrot $temp_screenshotइसके बजाय इसका उपयोग करने की सलाह देता हूं , यह इस अजीब व्यवहार को नहीं दिखाता है।) और छवि को क्रॉप करने के लिए ImageMagick के convert1 का उपयोग किया जाता है। आउटपुट को आपके होम निर्देशिका में फ़ाइल नाम के रूप में टाइमस्टैम्प के साथ सहेजा जाता है, आप outputस्क्रिप्ट के चर को संपादित करके इस व्यवहार को बदल सकते हैं ।

उदाहरण आउटपुट

उदाहरण आउटपुट

बिना कॉल (या बेहतर: एक अदृश्य) टर्मिनल विंडो के साथ

मुझे लगता है कि आप अपनी स्क्रीन को हर बार स्क्रीन पर ब्लॉक करने वाला टर्मिनल नहीं चाहते हैं, इसलिए यहां इसके लिए एक समाधान है; स्क्रिप्ट को निम्नानुसार कॉल करें (यह मानते हुए कि स्क्रिप्ट बच गई थी ~/circular_screenshot.bash):

xterm -geometry 0x0-1-1 -e ~/circular_screenshot.bash

यह एक अदृश्य टर्मिनल विंडो में स्क्रिप्ट चलाता है (लाल "X" और एक नीले "टी" के साथ आइकन), आपको केवल यह सुनिश्चित करने की आवश्यकता है कि जब आप टाइप करते हैं तो यह ध्यान केंद्रित होता है Enter। आप अपने डेस्कटॉप वातावरण की सेटिंग का उपयोग करके इस कमांड को कीबोर्ड शॉर्टकट में असाइन कर सकते हैं।

जैसा कि ImageMagick अविश्वसनीय रूप से शक्तिशाली है आप इस स्क्रिप्ट को अन्य आकृतियों को आउटपुट करने के लिए अनुकूलित कर सकते हैं, मैंने ellipseएक ही त्रिज्या के साथ एक्स और वाई दिशा में ऊपर के सर्कल को खींचने के लिए उपयोग किया है - बदले में उदाहरण के $radius,$(bc <<<"$radius*0.5")लिए सनकी के साथ विलक्षण प्राप्त करने के लिए।

1: मैंने इस धागे से imagemagick.org पर अप्रोच लिया


अब ksnapshot के मुक्तहस्त चयन के साथ संयुक्त xdotool कुछ होगा!
सेबस्टियन स्टार्क

और आप सभी सेटिंग्स> कीबोर्ड में एक कस्टम शॉर्टकट जोड़ सकते हैं, + एक कस्टम शॉर्टकट जोड़ सकते हैं, इस स्क्रिप्ट को कमांड फ़ील्ड में रख सकते हैं और इसे प्रिंट कुंजी को असाइन कर सकते हैं।
माइक

@SebastianStark आपके मन में क्या है? एक अलग चयन (शायद मेरे अन्य विचार के समान )?
मिठाई

जब मैंने xdotool पढ़ा तो मैंने एक स्क्रिप्ट के बारे में सोचा जो ksnapshot के फ्रीहैंड चयन का उपयोग करने के लिए एक सर्कल में माउस कर्सर को स्थानांतरित करने के लिए xdotool का उपयोग करता है।
सेबस्टियन स्टार्क

@SebastianStark ओह, अब यह एक तीसरा तरीका है - कृपया एक स्क्रिप्ट लिखें और एक उत्तर जोड़ें! ;)
मिठाई

6

मैंने स्क्रीनशॉट के बारे में यहां कुछ चीजें खोजी हैं। जब हम उबंटू पर स्क्रीनशॉट लेते हैं (मेरा 16.04 है) तो हम वास्तव में नामक एक सॉफ्टवेयर का उपयोग कर रहे हैं gnome-screenshot। यह C में लिखा गया एक ओपन सोर्स सॉफ्टवेयर है और हम इसका सोर्स कोड इस लिंक पर GitHub पर पा सकते हैं :

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

खैर, वहाँ एक फाइल है, screenshot-area-selection.cजो मेरे सवाल का जवाब देती है। यह कोड की 361 पंक्तियों वाली एक फ़ाइल है इसलिए मैं इसे यहाँ पेस्ट नहीं करने जा रहा हूँ। लेकिन जहां तक ​​मुझे इस फाइल के बारे में समझ में आया (बहुत ज्यादा नहीं), यह कई कार्यों का उपयोग करता है जो एक आयताकार आकार के निर्माण के आसपास संरचित होते हैं ... जैसे कोड के इस टुकड़े में:

create_select_window (void)
{
  GtkWidget *window;
  GdkScreen *screen;
  GdkVisual *visual;

  screen = gdk_screen_get_default ();
  visual = gdk_screen_get_rgba_visual (screen);

  window = gtk_window_new (GTK_WINDOW_POPUP);
  if (gdk_screen_is_composited (screen) && visual)
    {
      gtk_widget_set_visual (window, visual);
      gtk_widget_set_app_paintable (window, TRUE);
    }

  g_signal_connect (window, "draw", G_CALLBACK (select_window_draw), NULL);

  gtk_window_move (GTK_WINDOW (window), -100, -100);
  gtk_window_resize (GTK_WINDOW (window), 10, 10);
  gtk_widget_show (window);

  return window;
}

typedef struct {
  GdkRectangle rectangle;
  SelectAreaCallback callback;
  gpointer callback_data;
  gboolean aborted;
} CallbackData;

इसलिए, मेरा निष्कर्ष यह है कि स्क्रीनशॉट का उपयोग करने के लिए किसी भी कॉन्फ़िगरेशन को बदलना संभव नहीं है gnome-screenshotक्योंकि इसका कोड इसके लिए संरचित नहीं है ... हालांकि कोड को डाउनलोड करना, कोड को स्वयं बदलना, इसे फिर से भरना और फिर अपने स्वयं के व्यक्तिगत संस्करण का उपयोग करना संभव है का है gnome-screenshot


4

स्वीकृत उत्तर के समान विचार का उपयोग करके मैंने हेक्सागोनल स्क्रीनशॉट लेने के लिए एक और स्क्रिप्ट बनाई है और मैं इसे यहां साझा कर रहा हूं यदि यह किसी और के लिए उपयोगी है।

उदाहरण आउटपुट

हेक्सागोनल स्क्रीनशॉट का उदाहरण

लिपी

#!/bin/bash

output=~/$(date +%F_%H%M%S).png
temp_screenshot=$(mktemp).png

read -p "Move cursor to center and press Enter"
eval $(xdotool getmouselocation --shell)
x1=$X
y1=$Y
read -p "Move cursor to edge and press Enter"
eval $(xdotool getmouselocation --shell)
x2=$X
y2=$Y

gnome-screenshot -f $temp_screenshot

radius=$(bc -l <<<"sqrt(($x2-$x1)^2+($y2-$y1)^2)")
ca=$(bc -l <<<"$radius/sqrt(3)") 
h=$(bc -l <<<"$radius/(sqrt(3)/2)")

P1_x=$(bc <<<"$x1+$ca")
P1_y=$(bc <<<"$y1+$radius")

P2_x=$(bc <<<"$x1+$h")
P2_y=$(bc <<<"$y1")

P3_x=$(bc <<<"$x1+$ca")
P3_y=$(bc <<<"$y1-$radius")

P4_x=$(bc <<<"$x1-$ca")
P4_y=$(bc <<<"$y1-$radius")

P5_x=$(bc <<<"$x1-$h")
P5_y=$(bc <<<"$y1")

P6_x=$(bc <<<"$x1-$ca")
P6_y=$(bc <<<"$y1+$radius")

convert $temp_screenshot -alpha on \
        \( +clone -channel a -evaluate multiply 0 -draw \
        "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y" \) \
        -compose DstIn -composite -trim "$output"

प्रक्रिया बिल्कुल स्वीकृत उत्तर के समान है । इस मामले में मैंने सिर्फ स्क्रिप्ट का नाम बदल दिया है:

"इसे उदाहरण के रूप में सहेजें ~/hexagonal_screenshot.bashऔर इसे निष्पादन योग्य बनाएं chmod +x ~/hexagonal_screenshot.bash। जब आप इसे चलाते हैं, तो स्क्रिप्ट पहले आपको माउस कर्सर को केंद्र की स्थिति में ले जाने के लिए कहती है और Enter दबाएं और फिर इसे किनारे की स्थिति में ले जाने के लिए (कोई फर्क नहीं पड़ता जो होता है) स्क्रिप्ट दूरी से त्रिज्या की गणना करती है) और फिर से Enter दबाएं। स्क्रीनशॉट तब लिया जाता है जब स्क्रीनशॉट लिया जाता है (मैं scrot $temp_screenshotइसके बजाय इसका उपयोग करने की सलाह देता हूं , यह इस अजीब व्यवहार को नहीं दिखाता है।) और ImageMagick का convertउपयोग छवि को क्रॉप करने के लिए किया जाता है। आउटपुट आपके घर निर्देशिका में फ़ाइल नाम के रूप में टाइमस्टैम्प के साथ सहेजा गया है, आप outputस्क्रिप्ट के चर को संपादित करके इस व्यवहार को बदल सकते हैं । "


अतिरिक्त जानकारी

मामले में किसी को शामिल गणित के बारे में उत्सुक है, यहाँ है कि मैंने यह कैसे किया। प्रक्रिया का उपयोग करके किनारों की एक अलग संख्या या विभिन्न आकृतियों के साथ बहुभुज बनाने के लिए एक Imagemagickही होगा: गणित करें और कोड के इस भाग में अंक जोड़ें या निकालें "polygon $P1_x,$P1_y $P2_x,$P2_y $P3_x,$P3_y $P4_x,$P4_y $P5_x,$P5_y $P6_x,$P6_y"

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

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