Onnistuuko php:llä kuvien muuttaminen lennosta?
Eli niin, ettei kuvia tallenneta koon muuttamisen tulostamisen välissä?
-Es4
Onnistuu, jos on tarkoituksena tulostaa kuva suoraan käyttäjälle, koska html:län sekaanhan ei kuvadataa voi laittaa (paitsi kikkailemalla, mutta en suosittele).
Milläs funktiolla tämä onnistuu?
Nyt meni vähän ohi tuo tarkoitatko, ettei suoraan tulostaminen ole suositeltavaa?
Voit kirjoittaa img-tagin sisään PHP-tiedoston nimen:
<img src="pieneksi.php?kuva=testi.png">
Skripti pieneksi.php muuttaa sitten parametrinaan saaman kuvan oikeankokoiseksi ja tulostaa kuvadatan sivulle. HTML-sivulla siis tavallaan kutsutaan erillistä skriptiä, joka luo kuvan.
Jos kuvat muutetaan aina samalla tavalla, minusta kannattaa kuitenkin tallentaa oikeankokoiset kuvat valmiiksi tiedostoihin, jotta palvelinta ei turhaan rasiteta.
lainaus:
ettei suoraan tulostaminen ole suositeltavaa?
Tarkoitin, että joko tulostat käyttäjän selaimelle pelkän kuvadatan (jolloin selaimen pitäisi tajuta että kyseessä on kuva ja näyttää se tai ehdottaa sen tallentamista), tai käyttää juuri Antin kertomaa tapaa jossa annetaan php-koodin osoite kuvatiedostoksi.
Kuvadatan sekoittamisella html:lään tarkoitin sitä, että käytetään keinoa jossa kuvadata on integroitu tiedoston urlin kohdalle (tämä on hieman kummallinen toteutus, emt toimiiko kaikilla selaimilla, ja kasvattaa turhaan html tiedoston kokoa)
HHm, mutta minkäslainen tuo pieneksi.php:n koodi olisi? millä funktioilla kuvan koko muutettaisiin?
Tarkoituksena olisi tehdä kuvagalleria scripti, jossa jokainen käyttäjä saa valita omaan resoluutioonsa parhaiten sopivan kuvakoon. Jos kaikki koot tallennataisiin tilaa menisi paljon. Serverillä ei olisi paljoa käyttäjiä jolloin lennosta muuttaminen lienee parempi tapa?
Kuvan kokoa pystyy muuttamaan näillä funktiolla:
https://www.php.net/manual/en/function.
https://www.php.net/manual/en/function.
Yksinkertaisimmillaan skripti olisi tällainen:
<?php $nimi = $_GET['kuva']; $kuva = imagecreatefrompng($nimi); $tiedot = getimagesize($nimi); $leveys = $tiedot[0]; $korkeus = $tiedot[1]; $uusi = imagecreatetruecolor($leveys / 2, $korkeus / 2); imagecopyresampled($uusi, $kuva, 0, 0, 0, 0, $leveys / 2, $korkeus / 2, $leveys, $korkeus); header("Content-type: image/png"); imagepng($uusi); ?>
Tämä pienentää kuvan puoleen sen alkuperäisestä koosta. Tähän tarkoitukseen parempi kuvamuoto olisi kyllä ehkä JPG.
Kiitos paljon :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.