কোনও বৃত্তাকার নির্বাচিত অঞ্চলের স্ক্রিনশট নেওয়া কি সম্ভব?


10

যখন আমরা নির্বাচিত অঞ্চলগুলির স্ক্রিনশট গ্রহণ করি Ubuntu( Shift+ Prt Scrবা Ctrl+ Shift+ ব্যবহার করে Prt Scr) আমরা সর্বদা একটি আয়তক্ষেত্রাকার অঞ্চলটি নির্বাচন করি । সুতরাং, আমি জানি যে আমি আয়তক্ষেত্রাকার চিত্রের সাথে একটি বৃত্ত তৈরি করতে কেবল ইনসক্যাপের মতো কিছু সফ্টওয়্যারটিতে চিত্রটি সম্পাদনা করতে পারলাম, তবে আমি জানতে চাই যে বিভিন্ন ধরণের আকার নির্বাচন করতে সক্ষম হওয়ার জন্য আমি কোনও কনফিগারেশন পরিবর্তন করতে পারি কিনা (মূলত বৃত্তগুলি) ) সরাসরি যখন আমি স্ক্রিনশট নিচ্ছি।

এটা কি সম্ভব?


1
এটি অবশ্যই অসম্ভব, বৃত্তটি কী আকার হবে এবং এর অবস্থানটি কী হবে। মুদ্রণ স্ক্রিনটি পুরো পর্দা (আয়তক্ষেত্র) বা বর্তমানে সক্রিয় উইন্ডো (আয়তক্ষেত্র) মুদ্রণ করে
ব্রডসওয়ার্ডি

আসলেই নয়, যখন আমরা শিফ্ট + প্রিন্টস্ক্রিন বা সিআরটিএল + শিফট + প্রিন্টস্ক্রিন ব্যবহার করি আমরা ইতিমধ্যে স্ক্রিনটি একটি আয়তক্ষেত্রাকার নির্বাচিত অঞ্চল মুদ্রণ করতে পারি ... আমি উবুন্টু 16.04 ব্যবহার করছি, আমি কেবলমাত্র একটি বৃত্তাকারে ডিফল্ট হিসাবে আসে যে এই আয়তক্ষেত্রাকার আকৃতিটি পরিবর্তন করতে চাই ।
রাফায়েল মায়ানারস্ক 12'18

Org / gnome / gnome- স্ক্রিনশটের জন্য dconf সম্পাদকের মাধ্যমে উপলভ্য সেটিংসগুলি হ'ল: স্বতঃ-সংরক্ষণ ডিরেক্টরি, বর্ডার-ইফেক্ট, ডিফল্ট-ফাইল-প্রকার, বিলম্ব, অন্তর্ভুক্ত-আইসিসি-প্রোফাইল অন্তর্ভুক্ত-অন্তর্ভুক্ত-পয়েন্টার, শেষ- সেভ-ডিরেক্টরি, উইন্ডো-শট নিন (চিত্রিত)। আকারটি কোনও সেটিং হিসাবে উপস্থিত নেই।
ব্রডসওয়ার্ডি

1
@ ব্রডসওয়ার্ডে ksnapshop তাই কেন পারবেন না;) সর্বাধিক বিজোড় আকার দেওয়ার জন্য এটিতে একটি "ফ্রি হ্যান্ড" রয়েছে; যদিও একটি চেনাশোনা তৈরি করা হচ্ছে ... একটি রামুইকো তৈরি করতে আপনি কতটা ভাল;)
রিনজউইন্ড

@ রম্য্যকো আমার কাছে আরেকটি ধারণা ছিল যে আমি সাধারণত আয়তক্ষেত্রাকার স্ক্রিনশট ব্যবহার করি এবং এর মধ্যে সবচেয়ে বড় সম্ভাব্য বৃত্তটি কেটে ফেলি, আপনি যেভাবে অভ্যস্ত তেমন অঞ্চলটি নির্বাচন করতে পারেন। আপনি কি এই পদ্ধতির সাথেও আগ্রহী?
মিষ্টান্ন

উত্তর:


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পরিবর্তে এটি ব্যবহারের পরামর্শ দিচ্ছি , এটি এই বিজোড় আচরণটি দেখায় না)) এবং চিত্রম্যাগিকের convert1 চিত্রটি ক্রপ করার জন্য ব্যবহৃত হয়। আউটপুট আপনার হোম ডিরেক্টরিতে ফাইলের নাম হিসাবে টাইমস্ট্যাম্পের সাহায্যে সংরক্ষণ করা হয়, আপনি outputস্ক্রিপ্টের পরিবর্তনশীল সম্পাদনা করে এই আচরণটি পরিবর্তন করতে পারেন ।

উদাহরণ আউটপুট

উদাহরণ আউটপুট

কল করুন (বা আরও ভাল: একটি অদৃশ্য সাথে) টার্মিনাল উইন্ডো

আমি মনে করি আপনি প্রতিবারের মতো স্ক্রিনশট তৈরি করার সময় আপনি কোনও টার্মিনাল আপনার পর্দা ব্লক করতে চান না, সুতরাং এর জন্য একটি সমাধান এখানে দেওয়া হয়েছে; স্ক্রিপ্টটি নিম্নরূপে কল করুন (ধরে নিলে স্ক্রিপ্টটি সংরক্ষণ করা হয়েছে ~/circular_screenshot.bash):

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

এটি একটি অদৃশ্য টার্মিনাল উইন্ডো (একটি লাল "এক্স" এবং একটি নীল "টি" সঙ্গে আইকন) মধ্যে স্ক্রিপ্টটি চালানোর, আপনি শুধু নিশ্চিত এটা নিবদ্ধ যখন আপনি টাইপ করতে হবে Enter। আপনি আপনার ডেস্কটপ পরিবেশের সেটিংস ব্যবহার করে একটি কীবোর্ড শর্টকাটে এই আদেশটি নির্ধারণ করতে পারেন।

ইমেজম্যাগিক যেহেতু অবিশ্বাস্যভাবে শক্তিশালী আপনি এই স্ক্রিপ্টটিকে অন্য আকারগুলিও আউটপুট হিসাবে মানিয়ে নিতে পারেন, তাই ellipseউপরের বৃত্তটি আঁকতে আমি একই ব্যাসার্ধ উভয় এবং এক্স উভয় দিক দিয়ে ব্যবহার করেছি - পরিবর্তে উদাহরণস্বরূপ $radius,$(bc <<<"$radius*0.5")0 এর উপরে একুশের সাথে একটি উপবৃত্ত পেতে।

1: আমি এই থ্রেড থেকে ইমেজমেজিক.অর্গ.এর উপর দৃষ্টিভঙ্গি নিয়েছি


এবার এক্সডটুলের সাথে মিলিয়ে কেএসএনপশটের ফ্রিহ্যান্ড সিলেকশন কিছু হবে!
সেবাস্তিয়ান স্টার্ক

এবং আপনি সমস্ত সেটিংস> কীবোর্ডে একটি কাস্টম শর্টকাট যুক্ত করতে পারেন, + একটি কাস্টম শর্টকাট যুক্ত করতে পারেন, এই স্ক্রিপ্টটি কমান্ড ক্ষেত্রে রাখুন এবং এটি মুদ্রণ কীতে নির্ধারণ করুন।
মাইক

@ সেবাস্তিয়ান স্টার্ক আপনার মনে কী আছে? একটি আলাদা নির্বাচন (সম্ভবত আমার অন্যান্য ধারণার অনুরূপ )?
মিষ্টান্ন

আমি যখন এক্সডটুল পড়ি তখন আমি এমন একটি স্ক্রিপ্টের কথা ভেবেছিলাম যেটিতে xdotool ব্যবহার করে একটি বৃত্তে মাউস কার্সারকে ksnapshot এর মুক্তহস্ত নির্বাচনের জন্য ব্যবহার করে move
সেবাস্তিয়ান স্টার্ক

@ সেবাস্তিয়ান স্টার্ক ওহ, এখন এটি তৃতীয় উপায় - দয়া করে একটি স্ক্রিপ্ট লিখুন এবং একটি উত্তর যুক্ত করুন! ;)
মিষ্টান্ন

6

আমি এখানে স্ক্রিনশট সম্পর্কে কিছু জিনিস আবিষ্কার করেছি। যখন আমরা উবুন্টুতে স্ক্রিনশট নিই (আমার বয়স 16.04) আমরা আসলে একটি সফটওয়্যার ব্যবহার করি gnome-screenshot। এটি সিতে লিখিত একটি ওপেন সোর্স সফ্টওয়্যার এবং আমরা এই লিঙ্কে গিটহাবে তার উত্স কোডটি খুঁজে পেতে পারি :

এখানে চিত্র বর্ণনা লিখুন

ঠিক আছে, সেখানে একটি ফাইল আছে যা screenshot-area-selection.cআমার প্রশ্নের উত্তর দেয়। এটি কোডের ৩১১ টি লাইনযুক্ত একটি ফাইল তাই আমি এটি এখানে আটকানো যাচ্ছি না। তবে যতদূর আমি এই ফাইলটি বুঝতে পেরেছি (খুব বেশি নয়), এটি অনেকগুলি ফাংশন ব্যবহার করে যা আয়তক্ষেত্রাকার আকৃতি তৈরির চারদিকে কাঠামোগত হয় ... এই কোডের এই অংশের মতো:

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। আপনি যখন এটি চালান, স্ক্রিপ্টটি প্রথমে আপনাকে মাউস কার্সারটিকে কেন্দ্রের অবস্থানে নিয়ে যেতে এবং এন্টার টিপুন এবং তারপরে এটি একটি প্রান্ত অবস্থানে নিয়ে যেতে বলে (কোন ব্যাপার না, স্ক্রিপ্টটি দূরত্ব থেকে ব্যাসার্ধ গণনা করে) এবং আবার এন্টার টিপুন screen স্ক্রিনশটটি নেওয়ার সময় পর্দাটি তারপরে ফ্লিকার করুন (আমি scrot $temp_screenshotপরিবর্তে এটি ব্যবহারের পরামর্শ দিচ্ছি , এটি এই বিজোড় আচরণটি দেখায় না)) এবং চিত্রম্যাগিক 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"

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.