GNU/Linux >> Belajar Linux >  >> Linux

Otomatiskan pemrosesan gambar dengan skrip Bash ini

Penulis tidak hanya bekerja dengan kata-kata, mereka sering harus bekerja dengan gambar. Penulisan teknis melibatkan penyajian banyak tangkapan layar untuk menyampaikan teknologi dan proses. Platform penerbitan yang berbeda mungkin memiliki persyaratan yang berbeda untuk gambar, seperti format gambar atau ukuran file.

Sebagai konsultan TI dan insinyur sistem, saya telah menulis banyak dokumentasi teknis sebagai kiriman klien, umumnya dengan Microsoft Word (.doc) sebagai format yang diperlukan. Dokumen apa pun dapat berkembang pesat saat konten ditambahkan. Pada hari-hari awal, tangkapan layar sering kali berupa bitmap (.bmp), yang dapat memiliki ukuran file yang sangat besar. Dokumen yang menjelaskan penginstalan sistem operasi ke server bisa menjadi file yang sangat besar.

Perampingan gambar tanpa membuatnya tidak dapat dibaca adalah latihan yang melelahkan. Bitmap dapat dikonversi ke file jpeg dan kemudian file png. Pengeditan terus menjadi tantangan bahkan kemudian ketika saya mengganti office suite saya ke LibreOffice. Untungnya, sebagian besar alat tangkapan layar saat ini menyimpan dalam format yang lebih kecil, seperti png.

Opensource.com memberikan batasan tertentu pada gambar yang digunakan dalam artikelnya. Saya mengembangkan metode tiga langkah cepat untuk menyiapkan gambar untuk artikel saya. Langkah pertama adalah menjadi pintar tentang pementasan, seperti mengubah ukuran jendela atau mengubah font. Dua langkah tambahan menjadi sangat berulang. Itu untuk memastikan gambar tidak melebihi batas lebar 600 piksel dan untuk menerapkan batas.

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Skrip prepimg.sh

Saya menulis skrip Bash bernama prepimg.sh untuk menangani tugas-tugas ini. Skrip ini menggunakan dua alat dari rangkaian ImageMagick.

Ubah ukuran gambar

Utilitas tangkapan layar menyimpan gambar ke Pictures direktori dengan nama umum—seperti Screenshot-20210923222312.png . prepimg.sh saya script memeriksa lebar piksel file dalam direktori ini dan mengubah ukuran yang melebihi batas. Langkah ini menggunakan identifikasi program dari rangkaian ImageMagick untuk menentukan lebar (%w).

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

Nilai lebar ditetapkan ke variabel W untuk digunakan sebagai pembanding hingga batas 600. Batas itu sendiri dapat dikonfigurasi melalui variabel $MAXWIDTH . Jika lebar ditentukan melebihi MAXWIDTH, maka program ImageMagick lain bernama convert dipanggil untuk mengurangi lebar gambar. Berikut adalah fungsi pemrosesan gambar dari skrip saya:

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

Ukuran gambar diperkecil seperlunya dan disimpan ke direktori lain yang ditentukan oleh $READY variabel. Dalam hal ini, gambar sebenarnya diubah ukurannya sedikit lebih kecil—598 piksel—untuk memberi ruang bagi penambahan batas, yang akan saya tunjukkan selanjutnya.

Tambahkan batas ke gambar

Terkadang sebuah gambar dapat muncul untuk berbaur dengan latar belakang halaman web. Ini karena warna latar depan gambar hingga tepinya sama dengan warna latar situs. Ini contohnya:

Seperti yang Anda lihat dengan gambar di atas, tidak mungkin untuk mengetahui di mana tepi gambar berada. Masalah ini tidak terbatas pada warna putih. Itu tergantung pada masing-masing situs dan warna tema yang digunakannya. Jadi, jika latar belakang berwarna merah dan tepi gambar juga berwarna merah, masalah yang sama akan terjadi. Skrip saya menyelesaikan ini dengan menggunakan konversi alat. -perbatasan opsi menambahkan batas ke setiap file gambar dengan ukuran 1 piksel. Opsi ini saja sudah cukup tetapi saya juga ingin mengatur warna dengan menggunakan -bordercolor pilihan. Ini contohnya:

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

Di bawah ini adalah gambar yang sama dengan perbatasan. Bukankah itu terlihat lebih bagus?

Gambar Anda sudah siap

Saya menggunakan for loop untuk beralih melalui direktori tangkapan layar. Ini memanggil fungsi process_img untuk setiap file. Fungsi ini menangani lebar dan batas. Kode lengkap melakukan beberapa pemeriksaan kewarasan seperti memastikan file tersebut benar-benar sebuah gambar.

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
 }

Langkah terakhir skrip adalah menyimpan file yang diproses di sub-direktori yang disebut Ready , yang ditentukan oleh variabel bernama $READY . Ini mempertahankan file asli untuk digunakan lebih lanjut.

Penggunaan

Prepimg.sh termasuk fasilitas bantuan yang diharapkan yang menjelaskan argumennya dan penggunaannya:

$ 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)

Kode dan kesimpulan

Kode yang disajikan dalam artikel tidak lengkap dan harus dianggap sebagai kodesemu. Anda dapat melihat skrip lengkapnya di repositori Git saya.

Paket ImageMagick adalah seperangkat alat yang ampuh untuk memanipulasi gambar. Anda dapat melakukan lebih banyak hal selain fungsi yang tergabung dalam skrip kecil saya. Koresponden Jim Hall juga baru-baru ini menulis tentang menggunakannya untuk mengubah ukuran gambar.

Apakah Anda lebih suka skrip Bash atau pengkodean dalam bahasa lain seperti C atau Python, otomatisasi sangat membantu. Dari waktu ke waktu, saya telah melihat bagaimana sedikit kode dapat mengurangi begitu banyak sakit kepala dan memungkinkan kita memanfaatkan waktu kita dengan lebih baik.


Linux
  1. Penerjemah Shell mana yang Menjalankan Skrip Tanpa Shebang?

  2. Tidak Dapat Memahami Script Ini. Bas?

  3. Skrip Bash memproses sejumlah perintah secara paralel

  1. Skrip Bash Dengan `set -e` Tidak Berhenti Pada Perintah `… &&...`?

  2. Perintah Rm Dalam Skrip Bash Tidak Bekerja Dengan Variabel?

  3. Jalankan perintah bash pada pipa jenkins

  1. Tidak Dapat Menghentikan Skrip Bash Dengan Ctrl+c?

  2. nama dasar dengan spasi dalam skrip bash?

  3. Panggil skrip Python dari bash dengan argumen