Advertisement
orborbson

bmp2png-merger

Oct 16th, 2024 (edited)
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.68 KB | Source Code | 0 0
  1. #!/usr/bin/bash
  2.  
  3. dane_globalne(){
  4.     TMP_DIR=".`basename ${0}`_tmp"
  5. }
  6.  
  7. sprzataj_tmp(){
  8.     [[ -d "${TMP_DIR}" ]] && rm -fr "${TMP_DIR}"
  9. }
  10.  
  11. tworz_tmp(){
  12.     sprzataj_tmp
  13.     mkdir "${TMP_DIR}"
  14. }
  15.  
  16. generuj-png(){
  17.     pkg=("find" "sed" "printf" "pngquant" "convert")
  18.     apt=("find" "sed" "printf" "pngquant" "imagemagick")
  19.     brak_pkg=""; brak_apt=""
  20.     for (( i=0; i<${#pkg[@]}; i++ )); do
  21.         command -v "${pkg[$i]}" &>/dev/null || {
  22.             brak_pkg="${brak_pkg}${pkg[$i]} "
  23.             brak_apt="${brak_apt}${apt[$i]} "
  24.         }
  25.     done
  26.  
  27.     [[ ! -z "${brak_pkg}" ]] && {
  28.         echo -e "[BŁĄD]: brak wymaganych pakietów:\n$brak_pkg\n\nAby zainstalować wpisz:\nsudo apt install ${brak_apt}\n"
  29.         return 1
  30.     }
  31.    
  32.     case "$1" in
  33.         "" | "--help") echo -e "\nUżycie: `basename $0` [procent_powiększenia] [nagłówek]\n\nGdzie:\n[procent_powiększenia] musi być liczbą z przedziału: 100-1000\n\nPrzykład:\n`basename $0` 500 \"tekst nagłówka\"\n" ; return 1 ;;
  34.     esac
  35.    
  36.     [[ ! "$1" =~ ^[1-9][0-9]+$ ]] || [[ "$1" -lt 100 ]] || [[ "$1" -gt 1000 ]] && {
  37.         echo -e "\n[BŁĄD]: parametr [procent_powiększenia] musi być liczbą z przedziału: 100-1000.\n"
  38.         return 1
  39.     }
  40.    
  41.     [[ -z "$2" ]] && {
  42.         echo -e "\n[BŁĄD]: brak nazwy nagłówka.\n"
  43.         return 1
  44.     }
  45.    
  46.     max_plikow=100; krok=1; max_krokow=6
  47.     echo -en "[$(( krok++ ))/${max_krokow}]: Sprawdzam ilość plików .bmp ... "
  48.     ilosc_plikow=`find . -type f -iregex "^\.\/[a-z0-9]+_.+\.bmp$" -regextype grep | wc -l`
  49.     echo "[${ilosc_plikow}] "
  50.    
  51.     [[ "${ilosc_plikow}" -eq 0 ]] && {
  52.         echo -e "\n[BŁĄD]: w bieżącym katalogu brak plików w odpowiednim formacie: \"id_nazwa.ext\".\n\nPrzykład:\n1_plik1.bmp\na_plik1.BMP\nA_plik1.BMP\n"
  53.         return 1
  54.     }
  55.    
  56.     [[ "${ilosc_plikow}" -gt "${max_plikow}" ]] && {
  57.         echo -e "\n[BŁĄD]: dopuszczalna liczba plików do przetworzenia wynosi: ${max_plikow}, w katalogu znajduje się: ${ilosc_plikow}\n"
  58.         return 1
  59.     }
  60.    
  61.     tworz_tmp
  62.     licz=1; plik=""; IFS=$'\n'
  63.    
  64.     for i in `find . -type f -iregex "^\.\/[a-z0-9]+_.+\.bmp$" -regextype grep | sort -V`; do
  65.         plik="${i:2}"; plik="${plik#*_}"; plik="${plik%.*}"
  66.         convert "${i}" -sample "${1}%" -weight "bold" -style "italic" -background "#0a8900" -fill "white" -pointsize "$(( ${1}/6 ))" label:"${plik}:" -gravity "north" +swap -append "${TMP_DIR}/`printf %05d ${licz}`.png" || {
  67.             echo -e "\n[BŁĄD]: Nie można przetworzyć pliku: ${i}"
  68.             return 1
  69.         }
  70.         echo -en "\r[${krok}/${max_krokow}]: Przetwarzam pliki .bmp ... [${licz}/${ilosc_plikow}] "
  71.         (( licz++ ))
  72.     done
  73.     (( krok++ ))
  74.    
  75.     plik_png="$(sed -r 's/[^[A-Za-z0-9ąćęłńóśżź\.\(\)]]*/_/g; s/[_]+/_/g; s/^_|_$//g' <<< ${2}).png"
  76.    
  77.     echo -en "\n[$(( krok++ ))/${max_krokow}]: Łączę pliki .png ... "
  78.     montage "${TMP_DIR}/*.png" -geometry "+10+0" -background "black" -set label "" "${TMP_DIR}/${plik_png}" &>/dev/null || {
  79.         echo -e "\n[BŁĄD]: Nie można połączyć plików (brak pamięci)."
  80.         return 1
  81.     }
  82.    
  83.     echo -en "\n[$(( krok++ ))/${max_krokow}]: Nadaję główną etykietę ... "
  84.     convert "${TMP_DIR}/${plik_png}" -weight "bold" -style "italic" -background "black" -fill "#259cee" -pointsize "$(( ${1}/4 ))" label:"${2}" -gravity "north" +swap -append "${TMP_DIR}/${plik_png}" &>/dev/null || {
  85.         echo -e "\n[BŁĄD]: Nie można nadać etykiety (brak pamięci)."
  86.         return 1
  87.     }
  88.    
  89.     echo -en "\n[$(( krok++ ))/${max_krokow}]: Kompresuję ... "
  90.     pngquant --force --strip --speed 1 --ext ".png" "${TMP_DIR}/${plik_png}" &>/dev/null || {
  91.         echo -e "\n[BŁĄD]: Nie można skompresować pliku .png (brak pamięci)."
  92.         return 1
  93.     }
  94.    
  95.     mv -f "${TMP_DIR}/${plik_png}" "${plik_png}"
  96.     echo -e "\n[$(( krok++ ))/${max_krokow}]: Gotowe, plik \"${plik_png}\" utworzony."
  97. }
  98.  
  99. dane_globalne
  100. generuj-png "${1}" "${2}"
  101. sprzataj_tmp
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement