Kirjoittaja Aihe: jpg kuvien konvertointi www käyttöön  (Luettu 15563 kertaa)

pekkis

  • Käyttäjä
  • Viestejä: 48
    • Profiili
jpg kuvien konvertointi www käyttöön
« : 03.12.05 - klo:20.06 »
Nykyisten digi kameroiden kuvatiedostokoko on melkoisen iso joten webbikäyttöön kuvia tulee hieman pienentää.  Tämä onnistuu mainiosti imagemacik ohjelmalla.  Ko. ohjelmaa voi käyttää skriptauksessa joten scriptin voi tallentaa Gnomen nautilus-scripts kansioon ja saada vaikkapa koko kansion kuvia konvertoitua haluamaansa kokoon.  Scripti käyttää imagemagick ohjelmaa kuvien koon muutokseen ja zenityä näyttämään missä mennään.

Zenity asentuu ubuntussa (gnome) oletuksena, mikäli zenityä ei ole asennetu se tulee asentaa mikäli haluat palautetta scriptiltä.

Asenna ensin imagemagick
Koodia: [Valitse]
pekkis@hoopee:~$ sudo apt-get install imagemagick
Tee teksiteditorilla tiedosto ~/.gnome2/nautilus-scripts/konvertoi-640x480 joka sisältää seuraavan scriptin
Koodia: [Valitse]
#!/bin/sh
 #kansio jonne pienenetyt kuvat luodaan
 POLKU="kuvat_680x480"
 #kansio edellisen alle jonne tallennetaan tumppikuvat
 TUMPIT="ico"
 # konvertoitavat kuvat, pääteet,huomaa kirjainkoko
 KUVAT="*.JPG *.JPEG *.jpg *.jpeg"
   #jos kuvakansiota ei ole niin luodaan
   if [ ! -d "$POLKU" ]; then
     #echo "luodaan kansio.." $POLKU
     mkdir -m 777 $POLKU
   fi
   #Jos tumppikansiota ei ole niin luodaan
   if [ ! -d "$POLKU/$TUMPIT/" ]; then
     #echo "luodaan kansio.." $POLKU/$TUMPIT
     mkdir -m 777 $POLKU/$TUMPIT/
   fi
#duunataan kansiosta läpi kaikki *.JPG *.JPEG *.jpg *.jpeg pääteiset kuvat
#ja lasketaan kuvien määrä
for z in $KUVAT; do
  za=$(($za+1))
done
#Tehdään zenitylle kerroin määrästä ja siitä etä liukupalkki on 100
kerroin=$((100/$za))
i=0
#duunataan kaikki *.JPG *.JPEG *.jpg *.jpeg kuvat läpi ja konvertoidaan...
(for a in $KUVAT; do
 if [ -e "$a" ]; then
   w=$(($w+$kerroin))
   i=$(($i+1))
   echo $w
   echo "#konvertoin... $a"
  #tässä konvertoidaan kuvat 640x480 kokoon 80% laadulla
   convert -size 640x480 "$a" -resize 640x480 -quality 80 "$POLKU/$a"
   convert "$POLKU/$a" -strip "$POLKU/$a"
  #tässä konvertoidaan tumppi kuvat 100x100 kokoon
   convert -size 100x100 "$POLKU/$a" -thumbnail 100x100  "$POLKU/$TUMPIT/$a"
  #Tämä sen takia etä zenity saa 100 täyteen.
   if [ "$i" -eq "$za" ]
    then
     echo 100
     echo "#valmis"
   fi
 fi
done)|zenity --progress --title="$NAUTILUS_SCRIPT_CURRENT_URI" --text="konvertoin..." --percentage=0  --auto-close
Anna tiedostolle suoritusoikeudet
Koodia: [Valitse]
chmod u+rwx ~/.gnome2/nautilus-scripts/konvertoi-640x480
Tämän jälkeen voit selata nautiluksella (gnome) haluaamasi kuvakansioon ja valita oikealla hiiren napilla Scripts/konvertoi-640x480

scripti rulettaa seuraavasti


Säästänyt hermoja ja aikaa, ainenkin meikäläisellä.
Lisätietoja:

#2005-12-06. Editoitu.
Lisätty scriptiin kommentointia ja KUVAT muuttuja (.jpg .JPG...) jolla pääsee eroon fontikoosta ja erillaisesta tiedostopäätteistä jpg kuvan kohdalla.

« Viimeksi muokattu: 06.12.05 - klo:09.20 kirjoittanut pekkis »

peran

  • Vieras
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #1 : 02.07.06 - klo:08.51 »
Pieni ongelma.
Koettelin käyttää hienoa imagemagick:n convert-ohjelmaa, ja nyt pitäisi saada selvitettyä (syötettyä convertille) kuvan korkeus pixeleinä.

Mikähän ohjelma antaa sellaisen tiedon ulos konsolilla ?  ???

 - Edit tiedostomuoto, jota mielelläni käyttäisin olisi .png
« Viimeksi muokattu: 02.07.06 - klo:08.53 kirjoittanut peran »

Owdy

  • Käyttäjä
  • Viestejä: 1954
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #2 : 02.07.06 - klo:09.54 »
Tällä voit itse määrittää kuvan koon joka kerta

Koodia: [Valitse]
#!/bin/bash
title="Pienennä kuvan kokoa"
scale="Kutista kokoon <pituus>x<korkeus>"

case $LANG in
sv* )
title="Skala bild"
scale="Storlek att skala till <längd>x<höjd>";;
esac

imgsize=`gdialog --title "$title" --inputbox "$scale" 200 100 2>&1`

while [ $# -gt 0 ]; do
picture=$1
/usr/bin/convert -scale $imgsize "$picture" "$imgsize-$picture"
shift
done

Pakollinen ei o ku ensimmäinen arvo ja toi laskee toisen sitten automaattisesti.

[ylläpito on poistanut liitteen]

peran

  • Vieras
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #3 : 02.07.06 - klo:10.20 »
Osku ymmärsit väärin. Minä todellakin tarvitsen kuvakoon tiedon, sillä muuten convert-ohjelma tekee kuvan väärissä suhteissa:

No en selvittänyt tarpeeksi tarkkaan ongelmaani:
Olen tekemässä skriptaa (, jota tuskin kukaan muu tarvitsee), jolla kuva pidetään samankokoisena, mutta poistetaan turhia osia.

Vaikea ymmärtää ellen kerro koko tarinaa...

Haluan alkon sivuilta pelkän viini-tieto-osion omaan käyttöön. (Tulostettavana kuvana ja samoilla suhteilla, 300 dpi:nä).

Koodi, joka melkein toimii, kun ensin on tallettanut alkon sivuilla olevan viinin tiedot firefoxissa .ps:ksi...
Koodia: [Valitse]
convert -density 300 -crop 80x95+20+80%  A B
convert -density 300 -trim B C
convert -density 300 -gravity SouthWest -crop 100x100+0+380% C D

1. Convert -> kuvasuhde säilyy.
2. Convert -> Kuvasuhde säilyy, mutta pixelimäärät ovat tuntemattomia.
3. Convert -> Kuva venyy 380:nen pixelin verran, mutta saisin sen pidettyä samanlaisena, jos saisin muuttujaan kiikutettua korkeuden suuruuden. (Prosentti vek, ja pikselit kehiin).

 - Edit en tiedä, miksi se tekee niin, enkä tiedä onko kysymyksessä bugi vai ominaisuus. Jostain syystä x,y on aina pixeleinä ja korkeus ja leveys suhteellisena, jos laittaa prosentin loppuun.

 - Edit lisää, jos joku haluaa testata scriptin toimivuutta, niin se ei näytä toimivan ainakaan tällä sivulla:
http://www.alko.fi/www/wwwBachus.nsf/viewAll/587777?opendocument
Sitten vain firefoxilla tulosta tiedostoon ja tiedoston nimeksi A

 - Edit Löytyihän se viimeinkin: pngcheck - paketissa on mukava nopea png-formaatin tulkitsija - Tosin parsimista tässä on.
« Viimeksi muokattu: 02.07.06 - klo:11.06 kirjoittanut peran »

Owdy

  • Käyttäjä
  • Viestejä: 1954
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #4 : 02.07.06 - klo:12.28 »
Osku ymmärsit väärin.
Enkä ymmärtänyt, en vastannut sulle vaan annoin vaihtoehdon tolle ekalle scriptille :D

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #5 : 02.07.06 - klo:16.04 »
Koettelin käyttää hienoa imagemagick:n convert-ohjelmaa, ja nyt pitäisi saada selvitettyä (syötettyä convertille) kuvan korkeus pixeleinä.

Kelpaisiko ImageMagick-pakettiin kuuluva identify?

Koodia: [Valitse]
$ identify -format "%wx%h" kuva.png
1024x768
$ identify -format "%w" kuva.png
1024
$ identify -format "%h" kuva.png
768

peran

  • Vieras
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #6 : 02.07.06 - klo:19.07 »
Koodia: [Valitse]
$ identify -format "%wx%h" kuva.png
1024x768
$ identify -format "%w" kuva.png
1024
$ identify -format "%h" kuva.png
768

Kappas, en huomannutkaan, vaikka kävin jo niiden sivuilta dokumentteja lukemassa. Sain kuitenkin toimimaan pngcheck:llä, tosin identify-näyttää olevan paljon parempi siihen tarkoitukseen kuin pngcheck.

Onkohan jollain tietoa, miten -crop -vivun pitäisi toimia, kun en millään saa toimimaan niin kuin haluaisin.
Kun ohjelmointitaidotkin on winukka puolelta, enkä haluaisi missään tapauksessa wineä näin pienen asian takia asennella.

Tietenkin voisi muuttaa .bmp:ksi ja muuttaa käsin kuvakokoa ja pienentää tiedostoa, mutta se nyt on sellainen purkkaratkaisu, johon en myöskään haluaisi ryhtyä. Nopeahan tuo imagemagick on.

Nop, uusi yritelmäni on tällä hetkellä (purkkakoodiahan tämä on, mutta ensimmäisiltä shell-ohjelmilta ei liene hirveitä tarvitse odotellakaan, ja vielä se on koe-asteella ennen viimeistelyä):
Koodia: [Valitse]
echo "vaihe 1."
convert -density 300 -crop 80x95+20+80%  A B.png
echo "vaihe 2."
convert -density 300 -trim B.png png:C.png
echo "vaihe 3."
file="C.png"
s=`pngcheck "$file"`
echo $s
declare -i nro
nro=${#file}+7
w=`expr substr "$s" "$nro" 4`
nro=$nro+5
declare -i h
h2=`expr substr "$s" "$nro" 4`
h=$h2-300
echo $w
echo $h
convert -density 300 -crop ${w}x${h}+0+0 "$file" D.png
echo "vaihe 4"

 Elikkäs vaihe 3-4 väli bugaa.
Muuttujien selitykset:
$file - tiedosto, jota käsitellään.
$s = OK: C.png (1163x1376, 24-bit RGB, non-interlaced, 98.6%).
$nro = osamerkkijonon apumuuttuja.
$w = 1163
$h2 = 1376
$h = 1076

Siitä huolimatta:
convert -density 300 -crop 1163x1076+0+0 C.png D.png
ei luo 1163x1076 kokoista kuvaa.  :'(

Koodia: [Valitse]
:~$ pngcheck D.png
OK: D.png (985x842, 24-bit RGB, non-interlaced, 98.2%).

 ???

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #7 : 03.07.06 - klo:12.08 »
Siitä huolimatta:
convert -density 300 -crop 1163x1076+0+0 C.png D.png
ei luo 1163x1076 kokoista kuvaa.  :'(

Koitapa jättää tuosta pois "-density 300" josko se muuttaisi tilannetta yhtään...

peran

  • Vieras
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #8 : 03.07.06 - klo:15.22 »
Siitä huolimatta:
convert -density 300 -crop 1163x1076+0+0 C.png D.png
ei luo 1163x1076 kokoista kuvaa.  :'(

Koitapa jättää tuosta pois "-density 300" josko se muuttaisi tilannetta yhtään...
No sitäkin olin koittanut, mutta convertoimalla C.png C.bmp:ksi ja sitten tehtyäni sama operaatio kuvalle, niin johan rupes pelittämään.  ;) :D :D

 Siis taitaapi olla jokin bugin tapainen.  :P

 No, ei siinä mennyt kuin puoli päivää pähkäillessä.

Waltsu

  • Käyttäjä
  • Viestejä: 11
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #9 : 16.08.06 - klo:15.51 »
Tuolla yksi scripti lisää halukkaille http://www.creationgif.com/debian/nis/

Melmacian

  • Käyttäjä
  • Viestejä: 868
  • Ubuntu Hardy
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #10 : 09.10.06 - klo:09.25 »
Whooh, opettelinpa hieman bash scriptausta pekkis:n scriptin innoittamana ja tein siitä hieman parannellun version(eipä tuohon alkuperäistä koodia jääny juuri ollenkaan :)) pelkästään terminaalia varten, jotta se ei olisi työpöytä riippuvainen.

Paranneltuja ominaisuuksia:
- Kuvan koon muunto kuvan pisimmän sivun mukaan, siten että kuvasuhde säilyy
- Pieniä kuvia ei suurenneta
- Mahdollisuus muuttaa vakioarvoja (koko ja paikka minne kuvat laitetaan)
- Mahdollisuus laittaa kuvien mukaan alkuperäiset kuvat zip/rar/tar-paketissa

Olkaapa hyvä: kutista 1.0

Tämän tein lähinnä omia tarpeitani ajatellen, kun en ollut löytänyt itselleni täydellisesti sopivaa kuvien resize scriptiä, joten tein sellaisen sitten itse.
Usein tulee siis tarvetta siirtää digikuvat kaveireta varten nettiin katseltaviksi ja toki pitää heille antaa mahdollisuus saada originaalitkin.

Kommentteja?


Seuraavaksi sitten rakentamaan scriptiä, joka upittaa kuvat automaattisesti http-palvelimelle ;)
« Viimeksi muokattu: 26.11.06 - klo:16.50 kirjoittanut Epeli »

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #11 : 09.10.06 - klo:20.34 »
Kommentteja?

Toki. Skriptissä näkyi muutama asia jotka ainakin itse olisin saattanut tehdä toisin.

Skripti ei nykyisellään selviä tiedostoista joissa on välilyönti. Osassa paikoista tämä mahdollisuus on huomioitu ja osassa taas ei ole.

Yhden rivin "if ... then ... fi" -rimpsut voisi korvata komentojen ehdollisella ketjuttamisella.
Koodia: [Valitse]
# Esimerkiksi tämä rivi...
if [ -z "$KOKO" ]; then KOKO=640; fi
# ...muuttuu tällaiseksi.
[ -z "$KOKO" ] && KOKO=640

Muuttuja $paketti kannattaisi varmaan suodattaa tr-komennon avulla jotta ehtolauseissa ei tarvitsisi huomioida gemenoita ja versaaleja erikseen.
Koodia: [Valitse]
paketti="$(echo $paketti | tr '[A-Z]' '[a-z]')"

Toisaalta voit myös tutustua shopt-komentoon (man bash) ja sen optioihin "nocasematch" ja "nocaseglob". Silloin ei tarvitsisi tehdä tuota tr-suodatusta ja muutenkin ne helpottaisivat ja parantaisivat skriptiä monelta osin :)

Melmacian

  • Käyttäjä
  • Viestejä: 868
  • Ubuntu Hardy
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #12 : 10.10.06 - klo:16.34 »
Kiitos vain vinkeistä. Taas askel pidemmällä.

Noista tiedoston nimi ongelmista valveutuneena ajattelin, että suodatan kuvista pois kaikki mahdollisia häiriöitä aiheuttamat merkit, kuten ääkköset ja välilyönnit. Ongelmia ilmeni heti, kun koitin poistaa ääkkösiä tr:llä (ä->a). Se ei vain toimi oikein.
esim.
Koodia: [Valitse]
uusi="$(echo "$vanha"  | tr 'ä' 'a')"muuttaa sanan ääkköset muotoon aaaakkaset.

Myöskään
Koodia: [Valitse]
uusi="$(echo "$vanha"  | tr '[:upper:]' '[:lower:]' )"Ei osaa muuttaa ääkkösten kapitaaleja pieniksi.

Mitähän muita vaihtoehtoja tähän olisi?

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #13 : 11.10.06 - klo:00.19 »
Noista tiedoston nimi ongelmista valveutuneena ajattelin, että suodatan kuvista pois kaikki mahdollisia häiriöitä aiheuttamat merkit, kuten ääkköset ja välilyönnit.

Suodattamisen sijasta kannattaa tehdä koodista sellaista että nuo menevät siitä läpi puhtaasti.


Lainaus
Ongelmia ilmeni heti, kun koitin poistaa ääkkösiä tr:llä (ä->a). Se ei vain toimi oikein.
esim.
Koodia: [Valitse]
uusi="$(echo "$vanha"  | tr 'ä' 'a')"muuttaa sanan ääkköset muotoon aaaakkaset.

Myöskään
Koodia: [Valitse]
uusi="$(echo "$vanha"  | tr '[:upper:]' '[:lower:]' )"Ei osaa muuttaa ääkkösten kapitaaleja pieniksi.

Mitähän muita vaihtoehtoja tähän olisi?

Nämä ongelmat johtuvat siitä ettei tr (tai oikeastaan mikään muukaan coreutils:n ohjelma) tue monitavuisia merkistöjä jollainen esimerkiksi utf-8 on. Yksinkertaisin tapa yksittäisten merkkien korvaamiseen on käyttää sed:iä.

Koodia: [Valitse]
uusi="$(echo "$vanha" |  sed 's/ä/a/g')"

Tuossa sed näkee ä-kirjaimen kahtena peräkkäisenä merkkinä jotka se korvaa a-kirjaimella.

Melmacian

  • Käyttäjä
  • Viestejä: 868
  • Ubuntu Hardy
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #14 : 11.10.06 - klo:00.49 »
Noista tiedoston nimi ongelmista valveutuneena ajattelin, että suodatan kuvista pois kaikki mahdollisia häiriöitä aiheuttamat merkit, kuten ääkköset ja välilyönnit.

Suodattamisen sijasta kannattaa tehdä koodista sellaista että nuo menevät siitä läpi puhtaasti.

Kyllä, kyllä, niinhän ne (nyt) menevätkin, mutta tarkoitus on vähentää ongelmia jatkossa. Monesti http-serverille ladattujen kuvien ääkköset eivät enää näy oikein tms.
(Ja juu, luotan siihen, että tämä ei aiheuta päällekkäisyyksiä tiedoston nimissä ;))

Tonde

  • Käyttäjä
  • Viestejä: 919
  • Feisty Fawn
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #15 : 24.11.06 - klo:14.35 »
Kyllä, kyllä, niinhän ne (nyt) menevätkin, mutta tarkoitus on vähentää ongelmia jatkossa. Monesti http-serverille ladattujen kuvien ääkköset eivät enää näy oikein tms.
(Ja juu, luotan siihen, että tämä ei aiheuta päällekkäisyyksiä tiedoston nimissä ;))
Testasin tuota sun skriptiä Edgyllä ja antaa virheilmoituksen:
Koodia: [Valitse]
/usr/bin/kutista.sh: 83: Syntax error: Bad substitution
Heitä hyväsit hitaudelle. Asenna ubuntu!

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #16 : 25.11.06 - klo:12.56 »
Testasin tuota sun skriptiä Edgyllä ja antaa virheilmoituksen:
Koodia: [Valitse]
/usr/bin/kutista.sh: 83: Syntax error: Bad substitution

Pikaisesti arvaten tuo johtuu siitä että skripti on määritelty sh-skriptiksi vaikka se todellisuudessa on bash-skripti. Muistaakseni Edgyssä /bin/sh ei suorituskykysyistä enää viittaa bashiin vaan johonkin toiseen shelliin.

Kokeile toimiiko skripti kun muutat sen ensimmäisen rivin muotoon "#!/bin/bash" (ilman lainausmerkkejä).

Tonde

  • Käyttäjä
  • Viestejä: 919
  • Feisty Fawn
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #17 : 25.11.06 - klo:18.04 »
Kokeile toimiiko skripti kun muutat sen ensimmäisen rivin muotoon "#!/bin/bash" (ilman lainausmerkkejä).
Hups! Imagemagick ei ollut asennettuna... Vaihdoin kyllä tuon ensimmäisen rivinkin sisällön, joten en tiedä oliko sen lisäämisellä merkitystä.

Eli nyt näytti skripti toimivan, ja hienosti toimiikin. Tämä tuli tositarpeeseen!
Heitä hyväsit hitaudelle. Asenna ubuntu!

Melmacian

  • Käyttäjä
  • Viestejä: 868
  • Ubuntu Hardy
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #18 : 25.11.06 - klo:22.10 »
Kokeile toimiiko skripti kun muutat sen ensimmäisen rivin muotoon "#!/bin/bash" (ilman lainausmerkkejä).
Hups! Imagemagick ei ollut asennettuna... Vaihdoin kyllä tuon ensimmäisen rivinkin sisällön, joten en tiedä oliko sen lisäämisellä merkitystä.

Eli nyt näytti skripti toimivan, ja hienosti toimiikin. Tämä tuli tositarpeeseen!
Ei sillä pitäisi olla merkitystä sillä /bin/sh on vain symbolinen linkki bashiin(/bin/bash).

Mutta kiva jos tykkää siitä muuten ;)

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Re: jpg kuvien konvertointi www käyttöön
« Vastaus #19 : 25.11.06 - klo:22.27 »
Ei sillä pitäisi olla merkitystä sillä /bin/sh on vain symbolinen linkki bashiin(/bin/bash).

Tuollaisia oletuksia ei kannata tehdä sillä skriptisi todennäköisesti hajoaa siinä vaiheessa kun tuota oletusta muutetaan. Käsittääkseni tuo muutettiin Edgyn yhteydessä ja nykyään se on linkki dash:iin. Lisätietoa: https://wiki.ubuntu.com/DashAsBinSh.

Lopuksi tuli mieleen vielä pieni parannusehdotus Tonden kokemuksien perusteella. Skripti voisi käynnistyessään tarkistaa että sen tarvitsemat riippuvuudet löytyvät ja jos jokin riippuvuus puuttuu niin skriptin voisi pysäyttää sopivalla virheilmoituksella. Tarkistuksessa voi käyttää apuna esimerkiksi which-komentoa jolla voi tarkistaa löytyykö muita tarvittavia komentoja.