Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

ประมวลผลภาพอัตโนมัติด้วยสคริปต์ทุบตีนี้

นักเขียนไม่เพียงแต่ทำงานกับคำพูดเท่านั้น แต่ยังต้องทำงานกับรูปภาพด้วย การเขียนทางเทคนิคเกี่ยวข้องกับการนำเสนอภาพหน้าจอจำนวนมากเพื่อถ่ายทอดเทคโนโลยีและกระบวนการ แพลตฟอร์มการเผยแพร่ที่แตกต่างกันอาจมีข้อกำหนดต่างๆ สำหรับรูปภาพ เช่น รูปแบบรูปภาพหรือขนาดไฟล์

ในฐานะที่ปรึกษาด้านไอทีและวิศวกรระบบ ฉันได้เขียนเอกสารทางเทคนิคจำนวนมากเป็นผลงานของลูกค้า โดยทั่วไปจะใช้ Microsoft Word (.doc) เป็นรูปแบบที่จำเป็น เอกสารใด ๆ สามารถเติบโตอย่างรวดเร็วเมื่อมีการเพิ่มเนื้อหา ในช่วงแรกๆ ภาพหน้าจอมักเป็นบิตแมป (.bmp) ซึ่งอาจมีขนาดไฟล์ที่ใหญ่มาก เอกสารที่อธิบายการติดตั้งระบบปฏิบัติการบนเซิร์ฟเวอร์อาจเป็นไฟล์ขนาดใหญ่มาก

การลดขนาดภาพโดยไม่ทำให้ไม่สามารถอ่านได้เป็นการฝึกที่ลำบาก บิตแมปสามารถแปลงเป็นไฟล์ jpeg และไฟล์ png ในภายหลังได้ การแก้ไขยังคงเป็นเรื่องท้าทายแม้ในเวลาต่อมาเมื่อฉันเปลี่ยนชุดสำนักงานเป็น LibreOffice โชคดีที่เครื่องมือจับภาพหน้าจอส่วนใหญ่ในปัจจุบันบันทึกในรูปแบบที่เล็กกว่า เช่น png

Opensource.com กำหนดข้อจำกัดบางอย่างเกี่ยวกับรูปภาพที่ใช้ในบทความ ฉันพัฒนาวิธีการสามขั้นตอนอย่างรวดเร็วในการเตรียมรูปภาพสำหรับบทความของฉัน ขั้นตอนแรกคือต้องฉลาดเกี่ยวกับการจัดเตรียม เช่น การปรับขนาดหน้าต่างหรือเปลี่ยนแบบอักษร อีกสองขั้นตอนกลายเป็นเรื่องซ้ำซากจำเจ ทั้งนี้เพื่อให้แน่ใจว่ารูปภาพจะไม่เกินขีดจำกัดความกว้าง 600 พิกเซลและเพื่อใช้เส้นขอบ

สคริปต์ prepimg.sh

ฉันเขียนสคริปต์ทุบตีชื่อ prepimg.sh เพื่อจัดการกับงานเหล่านี้ สคริปต์นี้ใช้เครื่องมือสองอย่างจากชุด ImageMagick

ปรับขนาดภาพ

ยูทิลิตี้สกรีนช็อตจะบันทึกรูปภาพไปยัง Pictures ไดเรกทอรีที่มีชื่อทั่วไป เช่น Screenshot-20210923222312.png . prepimg.shของฉัน สคริปต์ตรวจสอบความกว้างพิกเซลของไฟล์ในไดเร็กทอรีนี้และปรับขนาดที่เกินขีดจำกัด ขั้นตอนนี้ใช้ ระบุ โปรแกรมจากชุด ImageMagick เพื่อกำหนดความกว้าง (%w)

$ 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 พิกเซล ตัวเลือกนี้เพียงอย่างเดียวก็เพียงพอแล้ว แต่ฉันยังต้องการตั้งค่าสีโดยใช้ -bordercolor ตัวเลือก. นี่คือตัวอย่าง:

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)

โค้ดและบทสรุป

รหัสที่นำเสนอในบทความไม่สมบูรณ์และควรได้รับการพิจารณาว่าเป็นรหัสเทียม คุณสามารถดูสคริปต์ทั้งหมดได้ในที่เก็บ Git ของฉัน

ชุด ImageMagick เป็นชุดเครื่องมือที่มีประสิทธิภาพสำหรับจัดการรูปภาพ คุณสามารถทำสิ่งต่างๆ ได้อีกมากมายนอกเหนือจากฟังก์ชันที่รวมอยู่ในสคริปต์เล็กๆ ของฉัน ผู้สื่อข่าว Jim Hall เพิ่งเขียนเกี่ยวกับการใช้เพื่อปรับขนาดรูปภาพ

ไม่ว่าคุณจะชอบเขียนสคริปต์ Bash หรือเขียนโค้ดในภาษาอื่น เช่น C หรือ Python การทำงานอัตโนมัติก็ช่วยได้มาก ครั้งแล้วครั้งเล่า ฉันได้เห็นแล้วว่าโค้ดเล็กๆ น้อยๆ สามารถลดอาการปวดหัวมากมายได้อย่างไร และช่วยให้เราใช้เวลาของเราได้ดีขึ้น