কম্পিউটার

এই ব্যাশ স্ক্রিপ্টের সাথে ইমেজ প্রসেসিং স্বয়ংক্রিয় করুন

লেখকরা কেবল শব্দ দিয়ে কাজ করেন না, তাদের প্রায়শই চিত্র নিয়ে কাজ করতে হয়। প্রযুক্তিগত লেখার মধ্যে প্রযুক্তি এবং প্রক্রিয়াগুলি বোঝাতে প্রচুর স্ক্রিনশট উপস্থাপন করা জড়িত। বিভিন্ন প্রকাশনা প্ল্যাটফর্মে ছবির জন্য বিভিন্ন প্রয়োজনীয়তা থাকতে পারে, যেমন ছবির ফর্ম্যাট বা ফাইলের আকার।

একজন আইটি পরামর্শদাতা এবং সিস্টেম ইঞ্জিনিয়ার হিসাবে, আমি ক্লায়েন্ট ডেলিভারেবল হিসাবে প্রচুর প্রযুক্তিগত ডকুমেন্টেশন লিখেছি, সাধারণত প্রয়োজনীয় ফর্ম্যাট হিসাবে Microsoft Word (.doc) সহ। বিষয়বস্তু যোগ করার সাথে সাথে যেকোনো নথি দ্রুত বৃদ্ধি পেতে পারে। প্রারম্ভিক দিনগুলিতে, স্ক্রিনশটগুলি প্রায়শই বিটম্যাপ (.bmp) ছিল, যার ফাইলের আকার খুব বড় হতে পারে। একটি সার্ভারে একটি অপারেটিং সিস্টেমের ইনস্টলেশন বর্ণনাকারী একটি নথি একটি খুব বড় ফাইল হতে পারে৷

অপাঠ্য রেন্ডার না করে চিত্রগুলিকে ছোট করা একটি শ্রমসাধ্য অনুশীলন ছিল। বিটম্যাপগুলিকে jpeg ফাইল এবং পরে png ফাইলে রূপান্তর করা যেতে পারে। এমনকি পরে যখন আমি আমার অফিস স্যুটকে LibreOffice-এ স্যুইচ করেছিলাম তখনও সম্পাদনা একটি চ্যালেঞ্জ হিসাবে অব্যাহত ছিল। সৌভাগ্যবশত, বেশিরভাগ স্ক্রিনশট টুল আজ ছোট ফরম্যাটে সংরক্ষণ করে, যেমন png।

Opensource.com এর নিবন্ধগুলিতে ব্যবহৃত চিত্রগুলিতে নির্দিষ্ট সীমাবদ্ধতা রাখে। আমি আমার নিবন্ধগুলির জন্য ছবি প্রস্তুত করার জন্য একটি দ্রুত তিন-পদক্ষেপ পদ্ধতি তৈরি করেছি। প্রথম ধাপ হল স্টেজিং সম্পর্কে স্মার্ট হওয়া, যেমন একটি উইন্ডোর আকার পরিবর্তন করা বা ফন্ট পরিবর্তন করা। দুটি অতিরিক্ত পদক্ষেপ খুব পুনরাবৃত্তিমূলক হয়ে ওঠে। সেগুলি হল ছবিটি যাতে 600-পিক্সেল প্রস্থ সীমা অতিক্রম না করে তা নিশ্চিত করা এবং একটি বর্ডার প্রয়োগ করা৷

prepimg.sh স্ক্রিপ্ট

আমি prepimg.sh নামে একটি ব্যাশ স্ক্রিপ্ট লিখেছি এই কাজগুলি পরিচালনা করতে। এই স্ক্রিপ্টটি ImageMagick স্যুট থেকে দুটি টুল ব্যবহার করে।

ছবির আকার পরিবর্তন করুন

স্ক্রিনশট ইউটিলিটি ছবিটিকে Pictures এ সংরক্ষণ করে একটি জেনেরিক নামের ডিরেক্টরি—Screenshot-20210923222312.png এর মত কিছু . আমার prepimg.sh স্ক্রিপ্ট এই ডিরেক্টরির ফাইলগুলির পিক্সেল প্রস্থ পরীক্ষা করে এবং সীমা অতিক্রম করে এমন যেকোনো ফাইলের আকার পরিবর্তন করে। এই ধাপটি শনাক্তকরণ ব্যবহার করে প্রস্থ (%w) নির্ধারণ করতে ImageMagick স্যুট থেকে প্রোগ্রাম।

$ identify -format %w Screenshot-20210903202655.png
1217

প্রস্থ মান পরিবর্তনশীল W বরাদ্দ করা হয় 600 এর সীমার সাথে তুলনাকারী হিসাবে ব্যবহারের জন্য। সীমাটি নিজেই পরিবর্তনশীল $MAXWIDTH এর মাধ্যমে কনফিগারযোগ্য . যদি প্রস্থ MAXWIDTH অতিক্রম করার জন্য নির্ধারিত হয়, তাহলে রূপান্তর নামে আরেকটি ImageMagick প্রোগ্রাম ছবির প্রস্থ কমাতে বলা হয়। এখানে আমার স্ক্রিপ্ট থেকে চিত্র প্রক্রিয়াকরণ ফাংশন:

     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}" \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     
     ...    

চিত্রটিকে প্রয়োজনীয় আকারে ছোট করা হয় এবং $READY দ্বারা সংজ্ঞায়িত একটি ভিন্ন ডিরেক্টরিতে সংরক্ষিত করা হয় পরিবর্তনশীল এই ক্ষেত্রে, ছবিটি আসলে সামান্য ছোট আকারে রিসাইজ করা হয়েছে—598 পিক্সেল—একটি বর্ডার যোগ করার জন্য জায়গা দেওয়ার জন্য, যা আমি পরবর্তীতে দেখাচ্ছি।

ছবিতে একটি বর্ডার যোগ করুন

কখনও কখনও একটি ছবি ওয়েব পৃষ্ঠার পটভূমিতে মিশে যেতে পারে। এর কারণ হল ছবির ফোরগ্রাউন্ড কালারটি তার প্রান্ত পর্যন্ত সাইটটির ব্যাকগ্রাউন্ডের মতো একই রঙের। এখানে একটি উদাহরণ:

এই ব্যাশ স্ক্রিপ্টের সাথে ইমেজ প্রসেসিং স্বয়ংক্রিয় করুন এর দ্বারা চিত্র:

কোনো সীমানা ছাড়াই একটি ছবি৷ (CC BY-SA 4.0)

আপনি উপরের চিত্রটি দেখতে পাচ্ছেন, ছবিটির প্রান্তটি কোথায় তা বলা অসম্ভব। এই সমস্যাটি সাদা রঙের মধ্যে সীমাবদ্ধ নয়। এটি প্রতিটি পৃথক সাইট এবং এটি ব্যবহার করা থিমের রঙের উপর নির্ভর করে। সুতরাং, যদি ব্যাকগ্রাউন্ড লাল হয় এবং ছবির প্রান্তটিও লাল হয়, এই একই সমস্যা দেখা দেয়। আমার স্ক্রিপ্ট রূপান্তর ব্যবহার করে এটি সমাধান করে টুল. -সীমান্ত বিকল্পটি 1 পিক্সেল আকারের প্রতিটি চিত্র ফাইলে একটি বর্ডার যোগ করে। এই বিকল্পটি নিজেই যথেষ্ট হবে কিন্তু আমি -বর্ডাররং ব্যবহার করে রঙ সেট করতে চাই বিকল্প এখানে একটি উদাহরণ:

convert -bordercolor black -border 1 Screenshot-20210903202655.png

নীচে একটি সীমানা সহ একই চিত্র। এটা কি সুন্দর দেখাচ্ছে না?

এই ব্যাশ স্ক্রিপ্টের সাথে ইমেজ প্রসেসিং স্বয়ংক্রিয় করুন এর দ্বারা চিত্র:

সীমানা সহ একটি ছবি। (CC BY-SA 4.0)

আপনার ছবি প্রস্তুত

আমি একটি for ব্যবহার করি স্ক্রিনশট ডিরেক্টরির মাধ্যমে পুনরাবৃত্তি করতে লুপ করুন। এটি ফাংশনটিকে process_img বলে প্রতিটি ফাইলের জন্য। ফাংশনটি প্রস্থ এবং সীমানা উভয়ই পরিচালনা করে। সম্পূর্ণ কোডটি কিছু বিচক্ষণতা যাচাই করে যেমন ফাইলটি আসলে একটি ছবি তা নিশ্চিত করা।

process_img() {
     # verify that file is an image file, and then get dimensions
     if file "${SCREENSHOTS}"/"${1}" | grep -qE 'image|bitmap'; then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is an image"
         W=$(identify -format %w "${SCREENSHOTS}"/"${1}")
     else
         echo "File ${SCREENSHOTS}/${1} is not an image."
         W=0
     fi
 
     # resize and border
     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}" \
                 -bordercolor $BORDER \
                 -border 1 \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     else
         convert -bordercolor $BORDER \
                 -border 1 \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     fi
 }

স্ক্রিপ্টের চূড়ান্ত ধাপ হল প্রক্রিয়াকৃত ফাইলগুলিকে Ready নামে একটি সাব-ডিরেক্টরিতে সংরক্ষণ করা। , যা $READY নামের ভেরিয়েবল দ্বারা নির্ধারিত হয় . এটি আরও ব্যবহারের জন্য মূল ফাইলগুলিকে সংরক্ষণ করে৷

ব্যবহার

Prepimg.sh এর আর্গুমেন্ট এবং তাদের ব্যবহার বর্ণনা করে প্রত্যাশিত সহায়তা সুবিধা অন্তর্ভুক্ত করে:

$ prepimg.sh -h
prepimg.sh Version 0.7 - written by Alan Formy-Duval
prepimg.sh [OPTIONS]
--verbose, -v Be verbose
--directory, -d Screenshot directory (default: /home/alan/Pictures/Screenshots)
--ready, -r Ready directory (default: /home/alan/Pictures/Screenshots/Ready)
--border, -b Border color (default: black)

কোড এবং উপসংহার

নিবন্ধে উপস্থাপিত কোড অসম্পূর্ণ এবং pseudocode বিবেচনা করা উচিত. আপনি আমার গিট রিপোজিটরিতে সম্পূর্ণ স্ক্রিপ্ট দেখতে পারেন।

ইমেজ ম্যাজিক স্যুট হল ইমেজ ম্যানিপুলেট করার জন্য একটি শক্তিশালী টুলের সেট। আমার ছোট্ট স্ক্রিপ্টে অন্তর্ভুক্ত ফাংশনগুলি ছাড়াও আপনি আরও অনেক কিছু করতে পারেন। সংবাদদাতা জিম হল সম্প্রতি একটি চিত্রের আকার পরিবর্তন করতে এটি ব্যবহার করার বিষয়ে লিখেছেন৷

আপনি সি বা পাইথনের মতো অন্য ভাষায় ব্যাশ স্ক্রিপ্টিং বা কোডিং পছন্দ করুন না কেন, অটোমেশন একটি দুর্দান্ত সাহায্য। সময়ের পর পর, আমি দেখেছি কিভাবে সামান্য কিছু কোড অনেক মাথাব্যথা কমাতে পারে এবং আমাদের সময়কে আরও ভালোভাবে ব্যবহার করতে দেয়।


  1. ধাঁধার এই বইটি দিয়ে ব্যাশ শিখুন

  2. Stargazing যখন এই সহায়ক ব্যাশ স্ক্রিপ্ট ব্যবহার করুন

  3. এই সাধারণ ব্যাশ স্ক্রিপ্টের সাহায্যে ঘরে বসে ডবল-পার্শ্বযুক্ত নথি মুদ্রণ করুন

  4. 5টি ব্যবহারিক উদাহরণ সহ ব্যাশ স্ক্রিপ্টিং ভূমিকা টিউটোরিয়াল