Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: ekeimaja - 24.07.16 - klo:13.53

Otsikko: Skripti kuvien pienennykseen
Kirjoitti: ekeimaja - 24.07.16 - klo:13.53
Miten voin tehdä skriptin, millä voi pienentää kaikki hakemistossa olevat kuvat tietyn kokoisiksi, esim >2000px kokoon 800? Toimintaperiaatteeltaan olisi: mene terminaalilla kuvien kansioon, aja skripti, homma valmis.
Otsikko: Vs: Skripti kuvien pienennykseen
Kirjoitti: kamara - 24.07.16 - klo:14.01
Käytä scriptin tekemiseen lempi editoriasi (Esim. Gedit, Nano, Vim, Kate ...)

Käy For-silmukalla kaikki kuvat läpi.
Tee mkdir:llä muutetut-kansio, johon tallennat muutetut kuvat.

Ota talteen kuvan tiedot identify:llä. (kuvan korkeus ja leveys tiedot).

Muuta kuvien koko convert-ohjelmalla.
Otsikko: Vs: Skripti kuvien pienennykseen
Kirjoitti: kamara - 24.07.16 - klo:14.23
Identify:llä leveys...
Koodia: [Valitse]
identify -format "%w" kuvatiedostoni.png

Identify:llä korkeus...
Koodia: [Valitse]
identify -format "%h" kuvatiedostoni.png

Joten... Kuvan tiedot muuttujille:
Koodia: [Valitse]
width=`identify -format "%w" kuvatiedostoni.png`
height=`identify -format "%h" kuvatiedostoni.png`

- Edit laskusuoritukset voi tehdä bc:llä ?
Koodia: [Valitse]
echo "scale=10;10/7"|bc

- Edit 2: Siis uusi korkeus on...
Koodia: [Valitse]
height2=`echo "scale=10;800*$height/$width"|bc`

Tai pyöristettynä kokonaisluvuksi...
Koodia: [Valitse]
height2=`echo "scale=0;($width/2+800*$height)/$width"|bc`

Edit3 - Tässä listataan hakemiston kaikki .png-tiedostot...
Koodia: [Valitse]
for f in *.png do echo $f ;done
Otsikko: Vs: Skripti kuvien pienennykseen
Kirjoitti: ekeimaja - 24.07.16 - klo:15.48
Saisko hieman selkeämmän selityksen noihin, kun en ole aikaisemmin noita skriptejä tehnyt.  Ja kuvien lopullinen koko pitäisi olla 800x533
Otsikko: Vs: Skripti kuvien pienennykseen
Kirjoitti: kamara - 24.07.16 - klo:16.43
Saisko hieman selkeämmän selityksen noihin, kun en ole aikaisemmin noita skriptejä tehnyt.  Ja kuvien lopullinen koko pitäisi olla 800x533

Sorry, olen hivenen laiska...
Jos kuvien koko on aina sama, niin silloin ei tarvitse nuuskia kokoa identify:llä. Lyhyt "scripti" on seuraavanlainen...
Koodia: [Valitse]
mkdir 800x533;for f in *.png ;do convert $f -resize "800x533" "800x533/$f"; done

Edit - Sitten "scriptin" selittäminen...
Koodia: [Valitse]
mkdir 800x533;
mkdir:n avulla luodaan hakemisto/kansio 800x533.

For-do-done-silmukalla käydään kaikki kuvat läpi s.e. muuttujan sisällä yksittäisen tiedoston nimi menee $f-muuttujaan. Tässä esimerkissäni käydään png-formaatin kuvat läpi.
Koodia: [Valitse]
for f in *.png ;do
...
done

Silmukan sisällä muutetaan convert-ohjelman avulla kyseisen tiedoston koko 800x533 säilyttäen kuvasuhteet.
Koodia: [Valitse]
convert $f -resize "800x533" "800x533/$f";
Ensimmäinen $f on lähde tiedosto, ja "800x533/$f" on kohdetiedosto, joten kuvat menevät 800x533-hakemiston alle. Varsinaisen kuvakoon muutoksen tekee -resize "800x533"-vipu ja parametri.

Jos haluat näyttää minkä kuvien kokoa muutetaan, niin tiedostonnimet voidaan tulostaa echo-käskyn avulla:
Koodia: [Valitse]
echo "$f->800x533/$f";

Jos lisäät kyseisen käskyn, niin scripti muuttuu siis vähäsen, ja tulos on tämän näköinen...
Koodia: [Valitse]
mkdir 800x533;for f in *.png ;do convert $f -resize "800x533" "800x533/$f";echo "$f->800x533/$f"; done

Otsikko: Vs: Skripti kuvien pienennykseen
Kirjoitti: kamara - 24.07.16 - klo:17.02
Jos haluat tehdä kyseisestä käskysarjasta  scriptin, niin voit kirjoittaa editorilla (Esim. nanolla).

Ensin päätteellö avataan nano:
Koodia: [Valitse]
nano pienennakuvat.sh

Nanoon kirjoitetaan seuraavat tekstit:
Koodia: [Valitse]
#!/bin/bash
mkdir 800x533;
for f in *.png ;
do
    convert $f -resize "800x533" "800x533/$f";
    echo "$f->800x533/$f";
done
(OffTopic)
Huom! vaikka nanolla kirjoitatkin scriptin useampaan riviin, niin se on suoritukseltaan täsmälleen sama kuin yhden rivin ohjelma.
Eli tämä, mutta monen rivin ohjelma on helpommin luettava:
Koodia: [Valitse]
mkdir 800x533;for f in *.png ;do convert $f -resize "800x533" "800x533/$f";echo "$f->800x533/$f"; done
(/OffTopic)

CTRL+X ja tallenna.

Sen jälkeen anna scriptille suoritusoikeudet:
Koodia: [Valitse]
chmod 755 pienennakuvat.sh

Sen jälkeen voitkin testata scriptisi toiminnan käskyttämällä scriptiä päätteen avulla:
Koodia: [Valitse]
./pienennakuvat.sh
Otsikko: Vs: Skripti kuvien pienennykseen
Kirjoitti: jekku - 25.07.16 - klo:05.15
Saisko hieman selkeämmän selityksen noihin, kun en ole aikaisemmin noita skriptejä tehnyt.  Ja kuvien lopullinen koko pitäisi olla 800x533

Onko kaikissa kuvissasi kuvasuhde sama?

Minä käytän ohjelmaa convert (tulee jonkun setin mukana, ei löytyne suoraan aptituden haulla?) mutta en vaihda kuin leveyden:

Koodia: [Valitse]
convert alkup.png -resize 800 muutetut/uusinimi.png

Ja tuo sitten silmukkaan, vaikka kuten aiemmin tässäkin ketjussa ohjeistettu.
(Vaihdan myös nimen vaikka konvertoin eri hakemistoon, koska haluan tietää että kyseessä pienennetty kuva.)
Otsikko: Vs: Skripti kuvien pienennykseen
Kirjoitti: raimo - 25.07.16 - klo:10.02
Minä käytän ohjelmaa convert (tulee jonkun setin mukana, ei löytyne suoraan aptituden haulla?)

Nuo edellämainitut komennot vaatii ImageMagick:n asennuksen
Koodia: [Valitse]
sudo apt-get install imagemagick
http://www.imagemagick.org/
Otsikko: Vs: Skripti kuvien pienennykseen
Kirjoitti: Postimies - 28.08.16 - klo:17.33
ImageMagick ohjelmalle löytyy netistä paljon valmiita skriptejä. Voi lisätä vesileiman, terävöittää ym.  Helpoiten homma sujuu ihan Nautiluksella kunhan lisäpaketti on asennettu. Eli klikataan sitä hiiren oikeaa nappia. Aika monella editorilla onnistuu myös. Merkataan kuvat ja import tietyssä koossa ja formaatissa. Pakkauksen laatu vaikuttaa myös. Jos kuvia terävöittää ym. muunnoksessa kuvien tiedostokoko voi olla isompi lievällä pakkauksella vaikka kokoa pienennettäisiin.  Kuvia voi pienentää monella tapaa. Voi kokeilla vaikka  -filter Gaussian  vipua. -quality vivulla pakkauksen laatu. Tuolla on merkitystä jpg kuvilla.