Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

इस बैश स्क्रिप्ट के साथ इमेज प्रोसेसिंग को स्वचालित करें

लेखक न केवल शब्दों के साथ काम करते हैं, उन्हें अक्सर छवियों के साथ काम करना पड़ता है। तकनीकी लेखन में प्रौद्योगिकी और प्रक्रियाओं को व्यक्त करने के लिए बहुत सारे स्क्रीनशॉट प्रस्तुत करना शामिल है। अलग-अलग प्रकाशन प्लैटफ़ॉर्म में इमेज के लिए अलग-अलग ज़रूरतें हो सकती हैं, जैसे कि इमेज फ़ॉर्मैट या फ़ाइल का आकार।

एक आईटी सलाहकार और सिस्टम इंजीनियर के रूप में, मैंने क्लाइंट डिलिवरेबल्स के रूप में बहुत सारे तकनीकी दस्तावेज लिखे हैं, आमतौर पर आवश्यक प्रारूप के रूप में माइक्रोसॉफ्ट वर्ड (.doc) के साथ। सामग्री जोड़े जाने पर कोई भी दस्तावेज़ तेजी से विकसित हो सकता है। शुरुआती दिनों में, स्क्रीनशॉट अक्सर बिटमैप (.bmp) होते थे, जिनका फ़ाइल आकार बहुत बड़ा हो सकता है। एक सर्वर पर एक ऑपरेटिंग सिस्टम की स्थापना का वर्णन करने वाला दस्तावेज़ एक बहुत बड़ी फ़ाइल हो सकता है।

छवियों को अपठनीय प्रदान किए बिना उन्हें छोटा करना एक श्रमसाध्य अभ्यास था। बिटमैप्स को जेपीईजी फाइलों और बाद में पीएनजी फाइलों में बदला जा सकता है। बाद में भी संपादन एक चुनौती बनी रही जब मैंने अपने ऑफिस सुइट को लिब्रे ऑफिस में बदल दिया। सौभाग्य से, अधिकांश स्क्रीनशॉट टूल आज पीएनजी जैसे छोटे प्रारूपों में सहेजते हैं।

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 पिक्सल—एक सीमा जोड़ने के लिए जगह की अनुमति देने के लिए, जिसे मैं आगे दिखाता हूं।

इमेज में बॉर्डर जोड़ें

कभी-कभी एक छवि वेब पेज की पृष्ठभूमि में मिश्रित होती दिखाई दे सकती है। ऐसा इसलिए है क्योंकि छवि का अग्रभूमि रंग इसके किनारे तक और साइट की पृष्ठभूमि के समान रंग है। यहां एक उदाहरण दिया गया है:

इस बैश स्क्रिप्ट के साथ इमेज प्रोसेसिंग को स्वचालित करें इमेज इनके द्वारा:

बिना बॉर्डर वाली इमेज। (सीसी बाय-एसए 4.0)

जैसा कि आप ऊपर की छवि से देख सकते हैं, यह बताना असंभव है कि छवि का किनारा कहाँ है। यह समस्या केवल सफेद रंग तक ही सीमित नहीं है। यह प्रत्येक व्यक्तिगत साइट और उसके द्वारा उपयोग किए जाने वाले थीम रंगों पर निर्भर करता है। इसलिए, यदि पृष्ठभूमि लाल है और छवि का किनारा भी लाल है, तो यही समस्या होती है। मेरी स्क्रिप्ट रूपांतरित . का उपयोग करके इसे हल करती है औजार। -सीमा विकल्प प्रत्येक छवि फ़ाइल में 1 पिक्सेल के आकार के साथ एक सीमा जोड़ता है। यह विकल्प अपने आप में काफी होगा लेकिन मैं -bordercolor का उपयोग करके भी रंग सेट करना चाहता हूं विकल्प। यहां एक उदाहरण दिया गया है:

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

नीचे बॉर्डर वाली वही छवि है। क्या यह अच्छा नहीं लगता?

इस बैश स्क्रिप्ट के साथ इमेज प्रोसेसिंग को स्वचालित करें इमेज इनके द्वारा:

बॉर्डर वाली इमेज। (सीसी बाय-एसए 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)

कोड और निष्कर्ष

लेख में प्रस्तुत कोड अधूरा है और इसे स्यूडोकोड माना जाना चाहिए। आप पूरी स्क्रिप्ट को मेरे Git रिपॉजिटरी में देख सकते हैं।

इमेजमैजिक सूट छवियों में हेरफेर करने के लिए उपकरणों का एक शक्तिशाली सेट है। आप मेरी छोटी सी लिपि में शामिल कार्यों के अतिरिक्त और भी बहुत कुछ कर सकते हैं। संवाददाता जिम हॉल ने भी हाल ही में एक छवि का आकार बदलने के लिए इसका उपयोग करने के बारे में लिखा था।

चाहे आप बैश स्क्रिप्टिंग या सी या पायथन जैसी किसी अन्य भाषा में कोडिंग पसंद करते हैं, स्वचालन एक बड़ी मदद है। समय-समय पर, मैंने देखा है कि कैसे थोड़ा सा कोड इतने सारे सिरदर्द को कम कर सकता है और हमें अपने समय का बेहतर उपयोग करने की अनुमति देता है।


  1. स्टारगेजिंग करते समय इस सहायक बैश स्क्रिप्ट का उपयोग करें

    हम अक्सर सर्वर पर और डेवलपर्स द्वारा लिनक्स के उपयोग के बारे में बात करते हैं, लेकिन इसका उपयोग खगोल विज्ञान सहित कई अन्य क्षेत्रों में भी किया जाता है। Linux के लिए बहुत सारे खगोल विज्ञान उपकरण उपलब्ध हैं, जैसे आकाश मानचित्र, तारा चार्ट, और आपके टेलीस्कोप को नियंत्रित करने के लिए टेलीस्कोप ड्राइव स

  1. इस साधारण बैश स्क्रिप्ट के साथ घर पर दो तरफा दस्तावेज़ प्रिंट करें

    हमारे पास घर पर एक लेजर प्रिंटर है। यह Hewlett Packard LaserJet Pro CP1525nw कलर प्रिंटर एक पुराना मॉडल है, लेकिन यह एक बेहतरीन वर्कहॉर्स रहा है जो मज़बूती से और रंग में प्रिंट करता है। मैंने इसे कुछ साल पहले हमारे रास्पबेरी पाई का उपयोग प्रिंट सर्वर के रूप में किया था। लेज़रजेट मेरे गृह कार्यालय

  1. बैश स्क्रिप्टिंग परिचय ट्यूटोरियल 5 व्यावहारिक उदाहरणों के साथ

    हमारी चल रही यूनिक्स सेड और यूनिक्स Awk श्रृंखला के समान, हम बैश स्क्रिप्टिंग पर कई लेख पोस्ट करेंगे, जो सभी बैश स्क्रिप्टिंग तकनीकों को व्यावहारिक उदाहरणों के साथ कवर करेगा। शेल एक प्रोग्राम है, जो यूजर कमांड की व्याख्या करता है। कमांड या तो उपयोगकर्ता द्वारा सीधे दर्ज किए जाते हैं या शेल स्क्रिप्