Funktio muutttaa kuvan koon ja säilyttää alkuperäiset mittasuhteet.
Käyttö:
Ensimmäinen parametri on kuvatiedoston nimi, toinen haluttu korkeus/leveys, ja kolmas kertoo funktiolle onko edellinen arvo korkeus vai leveys.
Esimerkki: muunnakoko("kuvasi.jpg", 120, "w");
<?php function muunnakoko($filu, $koko, $hvaiw){ $tiedot = getimagesize($filu); if($tiedot[2] == 2){ header("Content-type: image/jpeg"); $kuva = imagecreatefromjpeg($filu); } else if($tiedot[2] == 3){ header("Content-type: image/png"); $kuva = imagecreatefrompng($filu); } else die(); $korkeus = $tiedot[1]; $leveys = $tiedot[0]; if($hvaiw == "h"){ $suhde = $leveys / $korkeus; $pikkukork = $koko; $pikkulev = $koko * $suhde; } else if($hvaiw == "w"){ $suhde = $korkeus / $leveys; $pikkukork = $koko * $suhde; $pikkulev = $koko; } $pikkukuva = imagecreatetruecolor($pikkulev, $pikkukork); imagecopyresampled($pikkukuva, $kuva, 0, 0, 0, 0, $pikkulev+1, $pikkukork+1, $leveys, $korkeus); imagepng($pikkukuva); imagedestroy($kuva); imagedestroy($pikkukuva); } ?>
Ovelaa että annetaan korkeus/leveys parametri merkkijonona. Toisaalta ei taas tule sinänsä parempaakaan tapaa itsellä mieleen kun en PHP:tä erityisen hyvin taida.
Mainittaneen vielä että jos joku haluaa pehmeän koon muuton, käyttäköön imagecopyresampled-funktiota imagecopyresized:n sijaan.
..ör
Mulla toimii ihan hyvin että jos jättää <img>-tagista windthin tai heightin pois niin mittasuhteet pysyy oikeina... miks tämmösiä sitten turhaan on olemassa?
Gwaur, jos käyttää PHP:tä niin ei selaimen tarvi pienentää/suurentaa sitä :)
Tässä on hyvää myös se, että käyttäjän ei tarvitse ladata oikeakokoista kuvaa, joka on vain kutistettu, vaan skripti luo täysin uuden, tiedostokooltaan pienemmän kuvan.
Taidan laittaa tuohon koodiin sen imagecopyresampledin, tuleehan sillä parempi kuva. Tosin imagecopyresized on nopeampi.
sit kuitenkin löytyy joku imageresizeusingcorrectratio() :P
Olisiko esimerkkisivua jossain?
Miks tossa on "else if" eikä elseif :P
Ja mites toi nyt alkaa tulostaa tonne kuvaan jotain et "tiedostomuotoa ei tueta" - eikös se kuva mene silloin rikki...?
Niin ja tosissaankin tuon "lev" ja "kork" voisi muuttaa vaikka niin että lev = 1 ja kork = 0. ja sitten siihen funktioon jotain et: ($filu, $size, $koko = 1) tjsp... :D
else if on toiminnaltaan täysin sama kuin elseif, ja mielestäni selvempi lukea. Ja tuosta tulostamisesta olet kyllä oikeassa, lipsahti jostain syystä, taidankin ottaa sen samantien pois. Tuon "lev" ja "kork" on kyllä hiukka pöljä ratkaisu, muutan sen vaikka h ja w.
Hmm mites tätä pitäis muokata niin että se vaikka tallentaa sen pienennetyn kuvan jonnekki ? Eikä vaan sen kuvan tulostukseen ?
v0q, kuvan voi tallentaa png-kuvatiedostoksi lisäämällä:
imagepng($pikkukuva,$filu);
ja jpeg-muotoon:
imagejpeg($pikkukuva,$filu);
hmm.. Minulla tuli ongelmaksi, että kun yritän tallentaa kuvan tyylillä:
imagepng($pikkukuva,$filu);
Niin kuva kyllä tallentuu, mutta koodi yrittää edellen myös näyttää kuvan. Tämä on ongelmallista koska koodi jatkuu vielä kuvan pienentämisen ja tallentamisen jälkeen, mutta koska kuvaa yritetään näyttää käyttäjälle, niin koodin suorittaminen jää kesken. Onko neuvoja? :p
öh.. entäs jos haluu vaihtaa widthin ja heightin?
Sittenkös tehdään näin:
<?php muunnakoko("ehheh.png", 100, "w"); muunnakoko("ehheh.png", 100, "h"); ?>
Ei mun mielestä noin x)
Aihe on jo aika vanha, joten et voi enää vastata siihen.