Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: 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.
-
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.
-
Identify:llä leveys...
identify -format "%w" kuvatiedostoni.png
Identify:llä korkeus...
identify -format "%h" kuvatiedostoni.png
Joten... Kuvan tiedot muuttujille:
width=`identify -format "%w" kuvatiedostoni.png`
height=`identify -format "%h" kuvatiedostoni.png`
- Edit laskusuoritukset voi tehdä bc:llä ?
echo "scale=10;10/7"|bc
- Edit 2: Siis uusi korkeus on...
height2=`echo "scale=10;800*$height/$width"|bc`
Tai pyöristettynä kokonaisluvuksi...
height2=`echo "scale=0;($width/2+800*$height)/$width"|bc`
Edit3 - Tässä listataan hakemiston kaikki .png-tiedostot...
for f in *.png do echo $f ;done
-
Saisko hieman selkeämmän selityksen noihin, kun en ole aikaisemmin noita skriptejä tehnyt. Ja kuvien lopullinen koko pitäisi olla 800x533
-
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...
mkdir 800x533;for f in *.png ;do convert $f -resize "800x533" "800x533/$f"; done
Edit - Sitten "scriptin" selittäminen...
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.
for f in *.png ;do
...
done
Silmukan sisällä muutetaan convert-ohjelman avulla kyseisen tiedoston koko 800x533 säilyttäen kuvasuhteet.
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:
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...
mkdir 800x533;for f in *.png ;do convert $f -resize "800x533" "800x533/$f";echo "$f->800x533/$f"; done
-
Jos haluat tehdä kyseisestä käskysarjasta scriptin, niin voit kirjoittaa editorilla (Esim. nanolla).
Ensin päätteellö avataan nano:
nano pienennakuvat.sh
Nanoon kirjoitetaan seuraavat tekstit:
#!/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:
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:
chmod 755 pienennakuvat.sh
Sen jälkeen voitkin testata scriptisi toiminnan käskyttämällä scriptiä päätteen avulla:
./pienennakuvat.sh
-
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:
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.)
-
Minä käytän ohjelmaa convert (tulee jonkun setin mukana, ei löytyne suoraan aptituden haulla?)
Nuo edellämainitut komennot vaatii ImageMagick:n asennuksen
sudo apt-get install imagemagick
http://www.imagemagick.org/
-
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.