Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Kuvan koon muunnin

Sivun loppuun

Tempfile [04.12.2003 19:36:55]

#

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);
}
?>

thefox [05.12.2003 14:13:52]

#

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.

Gwaur [05.12.2003 14:26:55]

#

..ö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?

tejeez [05.12.2003 14:29:45]

#

Gwaur, jos käyttää PHP:tä niin ei selaimen tarvi pienentää/suurentaa sitä :)

Tempfile [05.12.2003 19:49:59]

#

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.

Tempfile [05.12.2003 22:08:45]

#

Taidan laittaa tuohon koodiin sen imagecopyresampledin, tuleehan sillä parempi kuva. Tosin imagecopyresized on nopeampi.

Gwaur [06.12.2003 00:21:37]

#

sit kuitenkin löytyy joku imageresizeusingcorrectratio() :P

T.M. [06.12.2003 02:32:38]

#

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

Tempfile [06.12.2003 11:41:51]

#

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.

v0q [30.10.2004 19:43:22]

#

Hmm mites tätä pitäis muokata niin että se vaikka tallentaa sen pienennetyn kuvan jonnekki ? Eikä vaan sen kuvan tulostukseen ?

piisami [28.12.2004 13:54:52]

#

v0q, kuvan voi tallentaa png-kuvatiedostoksi lisäämällä:

imagepng($pikkukuva,$filu);

ja jpeg-muotoon:

imagejpeg($pikkukuva,$filu);

ipe [24.05.2008 00:53:42]

#

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

rax [30.06.2008 20:27:37]

#

ö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)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta