Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: [Bash] Jak přizpůsobit funkci, aby četla hodnoty array?

Aktivity
Avatar
Daniel Pitra
Člen
Avatar
Daniel Pitra:9.2.2020 0:59

Zdravím všechny!

Vytvořil jsem si automatizační skript (ImageMagick, Ghostscript), který mi zkonvertuje libovolnou stránku z PDF na obrázek PNG. Bohužel se mi nedaří nastavit funkce tak, aby uměl číst více stránek najednou.. Kód zde: https://www.itnetwork.cz/…lighter/1274

Zkusil jsem: Zkoušel jsem nastavit hodnotu proměnné "$page", aby se ukládala jako array, což se mi podařilo, ale už si nevím rady, jak nastavit funkci "CONVERT", aby pro každou hodnotu v array spustila finální příkaz (ve smyčce)...

Chci docílit: Skript funguje dobře, akorát se ho snažím ještě vylepšit, aby uměl zkonvertovat i více stránek najednou..

 
Odpovědět
9.2.2020 0:59
Avatar
Odpovídá na Daniel Pitra
Luboš Běhounek Satik:9.2.2020 11:34

Ahoj, v bashi jsem delal jeden semestr ve skole nekde pred asi 13 rokama, takze doufam, ze me nekdo doplni/opravi :)

ve cteni stranky by mel byt parametr -a co to umi nacist do pole, takze si musis vytvorit pole, do ktereho to ulozis, pak to do nej pres parametr -a nactes

ted mas v poli cisla stranek, takze pro vypis vsech stranek budes potrebovat for cyklus, takze neco jako

for cisloStranky in poleStranek
do
        tady zavolat tvoji hlavni funkci, kde to provadis a jako parametr ji predat cisloStranky
done

jeste bude potreba upravit funkci convert, aby brala jako parametr cislo stranky a nepouzivala globalni promennou page

Nahoru Odpovědět
9.2.2020 11:34
https://www.facebook.com/peasantsandcastles/
Avatar
Daniel Pitra
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Daniel Pitra:9.2.2020 11:50

To jsem prave presne zkousel udelat. Syntaxi pro ziskani promenne "$page" jsem upravil takto,

read -e -p "Page to be converted (leave blank for first): " -a page
if [[ -z "$page" ]]; then
        page="0"
        break
    else
        break
fi

aby mi vzal vice cisel oddelene carkou, nebo mezerou... Ve funkci jsem pak zkousel pridat kod

for pages in ${page[*]}
do
        # finalni kod funkce CONVERT s upravenou promennou $page na $pages
done

Akorat tady mi to dela bordel, jak tam mam jeste nastavenou kontrolu, jestli uz soubor se stejnym nazvem ve slozce nahodou neexistuje...

 
Nahoru Odpovědět
9.2.2020 11:50
Avatar
Odpovídá na Daniel Pitra
Luboš Běhounek Satik:9.2.2020 15:54

jakou kontrolu a jakej presne bordel?

Nahoru Odpovědět
9.2.2020 15:54
https://www.facebook.com/peasantsandcastles/
Avatar
Daniel Pitra
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Daniel Pitra:9.2.2020 16:00

Prvni "if" ve funkci...

CONVERT()
{
    num=0
    name=$(basename "$file" .pdf | cut -d- -f1 | sed 's/.$//' | tr ' ' '-')
    ext="png"
    mark='/path/to/the/watermark.png'
    if [[ ! -e "$path"/"$name"_$num.$ext ]]; then
        echo "Creating thumbnail ..."
        convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
        else
            while [[ -e "$path"/"$name"_$num.$ext ]]; do
                (( num++ ))
            done
            echo "Creating thumbnail ..."
            convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
    fi

    while :
    do
        read -n 1 -s -p "Add watermark? [Y/n]" watermark
        case $watermark in
            ""|[yY] )
                echo ""
                echo "Adding watermark to thumbnail ..."
                convert -quiet "$path"/"$name"_$num.$ext "$mark" -gravity center -composite "$path"/"$name"_$num.$ext
                echo "DONE!"
                exit;
                ;;
            [nN] )
                echo ""
                echo "DONE!"
                exit;
                ;;
            * )
                echo ""
                echo "Use only 'y' or 'n' !"
        esac
    done
}
 
Nahoru Odpovědět
9.2.2020 16:00
Avatar
Odpovídá na Daniel Pitra
Luboš Běhounek Satik:9.2.2020 16:15

tady porad pouzivas page, ale mel bys pages, ne?
resp. prejmenopval bych to, ted je to obracene, v promenne page mas cely pole stranek a promenna v cyklu, kde mas cislo jedny stranky mas pojmenovanou pages, takze to trochu mate

Nahoru Odpovědět
9.2.2020 16:15
https://www.facebook.com/peasantsandcastles/
Avatar
Daniel Pitra
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Daniel Pitra:9.2.2020 16:16

Tohle je ten puvodni (funkcni) kod...

 
Nahoru Odpovědět
9.2.2020 16:16
Avatar
Daniel Pitra
Člen
Avatar
Daniel Pitra:9.2.2020 16:18

Az se dostanu k pocitaci, tak poslu zmeneny kod ;-)

 
Nahoru Odpovědět
9.2.2020 16:18
Avatar
Daniel Pitra
Člen
Avatar
Daniel Pitra:9.2.2020 17:06

Tak jsem to prejmenovaal a takhle teda ted vypada funkce "CONVERT":

CONVERT()
{
        num=0
        name=$(basename "$file" .pdf | cut -d- -f1 | sed 's/.$//' | tr ' ' '-')
        ext="png"
        mark='/path/to/the/watermark.png'
        if [[ ! -e "$path"/"$name"_$num.$ext ]]; then
                for page in ${pages[*]}
                do
                        echo "Creating thumbnail ..."
                        convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
                done
                else
                        while [[ -e "$path"/"$name"_$num.$ext ]]; do
                                (( num++ ))
                        done
                        for page in ${pages[*]}
                        do
                                echo "Creating thumbnail ..."
                                convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
                        done
        fi

        while :
        do
                read -n 1 -s -p "Add watermark? [Y/n]" watermark
                case $watermark in
                        ""|[yY] )
                                echo ""
                                echo "Adding watermark to thumbnail ..."
                                convert -quiet "$path"/"$name"_$num.$ext "$mark" -gravity center -composite "$path"/"$name"_$num.$ext
                                echo "DONE!"
                                exit;
                                ;;
                        [nN] )
                                echo ""
                                echo "DONE!"
                                exit;
                                ;;
                        * )
                                echo ""
                                echo "Use only 'y' or 'n' !"
                esac
        done
}
 
Nahoru Odpovědět
9.2.2020 17:06
Avatar
Daniel Pitra
Člen
Avatar
Daniel Pitra:9.2.2020 17:12

Uz je to hodne blizko, ale ted to dela to, ze to sice spusti ten prikaz spravne (podle poctu zadanych stranek), ale neprejmenuje ty soubory spravne, takze se prepisou a nazev zustava porad stejny...

 
Nahoru Odpovědět
9.2.2020 17:12
Avatar
Odpovídá na Daniel Pitra
Luboš Běhounek Satik:9.2.2020 17:15

posli aktualni stav

Nahoru Odpovědět
9.2.2020 17:15
https://www.facebook.com/peasantsandcastles/
Avatar
Daniel Pitra
Člen
Avatar
Daniel Pitra:9.2.2020 17:19

Tak jednu cast jsem dokazal! Uz to umi precist vsechny stranky a pridelit tomu spravne nazvy! :-)
Stacilo to jen mezi sebou prohodit...

CONVERT()
{
        num=0
        name=$(basename "$file" .pdf | cut -d- -f1 | sed 's/.$//' | tr ' ' '-')
        ext="png"
        mark='/Users/danielpitra/Documents/--- Wordpress ---/- DanielPitra.cz -/--- img ---/watermark2.png'
        for page in ${pages[*]}
                do
                        if [[ ! -e "$path"/"$name"_$num.$ext ]]; then
                                echo "Creating thumbnail ..."
                                convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
                        else
                                while [[ -e "$path"/"$name"_$num.$ext ]]; do
                                        (( num++ ))
                                done
                                echo "Creating thumbnail ..."
                                convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
                        fi
                done

        while :
        do
                read -n 1 -s -p "Add watermark? [Y/n]" watermark
                case $watermark in
                        ""|[yY] )
                                echo ""
                                echo "Adding watermark to thumbnail ..."
                                convert -quiet "$path"/"$name"_$num.$ext "$mark" -gravity center -composite "$path"/"$name"_$num.$ext
                                echo "DONE!"
                                exit;
                                ;;
                        [nN] )
                                echo ""
                                echo "DONE!"
                                exit;
                                ;;
                        * )
                                echo ""
                                echo "Use only 'y' or 'n' !"
                esac
        done
}

Ted mi teda akorat zbyva, jak udelat to, aby se skript zeptal, u kterych stranek ma pridat vodotisk a u kterych ne...

 
Nahoru Odpovědět
9.2.2020 17:19
Avatar
Daniel Pitra
Člen
Avatar
Daniel Pitra:9.2.2020 17:45

Mam to! Sice mi to prijde dost "neohrabane", ale funguje to...
Funkce "CONVERT" teda nyni vypada takhle:

CONVERT()
{
        num=0
        name=$(basename "$file" .pdf | cut -d- -f1 | sed 's/.$//' | tr ' ' '-')
        ext="png"
        mark='/path/to/the/watermark.png'
        for page in ${pages[*]}
                do
                        if [[ ! -e "$path"/"$name"_$num.$ext ]]; then
                                echo "Creating thumbnail ..."
                                convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
                                while :
                                do
                                        read -n 1 -s -p "Add watermark? [Y/n]" watermark
                                        case $watermark in
                                                ""|[yY] )
                                                        echo ""
                                                        echo "Adding watermark to thumbnail ..."
                                                        convert -quiet "$path"/"$name"_$num.$ext "$mark" -gravity center -composite "$path"/"$name"_$num.$ext
                                                        echo "DONE!"
                                                        exit;
                                                        ;;
                                                [nN] )
                                                        echo ""
                                                        echo "DONE!"
                                                        exit;
                                                        ;;
                                                * )
                                                        echo ""
                                                        echo "Use only 'y' or 'n' !"
                                        esac
                                done
                        else
                                while [[ -e "$path"/"$name"_$num.$ext ]]; do
                                        (( num++ ))
                                done
                                echo "Creating thumbnail ..."
                                convert -quiet -density 300 -quality 100 -thumbnail x1815 -background white -alpha remove "$file"[$page] "$path"/"$name"_$num.$ext
                                while :
                                do
                                        read -n 1 -s -p "Add watermark? [Y/n]" watermark
                                        case $watermark in
                                                ""|[yY] )
                                                        echo ""
                                                        echo "Adding watermark to thumbnail ..."
                                                        convert -quiet "$path"/"$name"_$num.$ext "$mark" -gravity center -composite "$path"/"$name"_$num.$ext
                                                        echo "DONE!"
                                                        break
                                                        ;;
                                                [nN] )
                                                        echo ""
                                                        echo "DONE!"
                                                        break
                                                        ;;
                                                * )
                                                        echo ""
                                                        echo "Use only 'y' or 'n' !"
                                        esac
                                done
                        fi
                done
}
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
9.2.2020 17:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.