Seuraava ongelma. Minun pitäisi tulostella kaikki kuvat tietokannasta, eli galleria pitäisi väsätä. Tarkoitus olisi saada ensiksi kaikki kuvat tulostettua ja siihen minulla on seuraava koodi valmiina:
<?php $yhteys = mysql_connect("***", "***", "***") or die("Kantaan ei saatu yhteyttä: ".mysql_error()); mysql_select_db("***", $yhteys) or die("Kantaa ei saatu valittua: ".mysql_error()); $tulos = mysql_query("SELECT * FROM kuvat", $yhteys) or die("Kysely ei onnistunut: ". mysql_error()); while($tulosrivi = mysql_fetch_array($tulos)){ $kuva = $tulosrivi["kuva"]; header ("Content-type: $kuvatyyppi"); echo $kuva; } ?>
Olen alottelija tässä touhussa, edelleen. Nyt se tulostaa ainoastaan yhden kuvan.
Sitten kun saisin tulostettua kaikki kuvat, pitäisi saada kuivien koot muutettua pienemmäksi, eli tumbnailiksi, ja tumbnailit toimivat linkkinä isompaan kuvaan. Mitähän tässä nyt pitäisi tehdä? Olen kokeillut vaikka mitä mutta ei.....
Tuolla tavalla voi tulostaa vain yhden kuvan, koska skriptin lopputulos vastaa tavallista kuvatiedostoa. Skripti lähettää selaimelle ensin tiedon kuvan tyypistä ja sitten koko kuvatiedoston sisällön. Selain käsittelee skriptiä tavallisen kuvan (esim. testi.png) tavoin, ja jos kuvan nimen kirjoittaa suoraan osoiteriville, niin silloin näkyvissä on kerrallaan vain yksi kuva.
Kuvagalleriassa kuvia ei kannata säilyttää erikseen tietokannassa, vaan tallentaa kuvat valmiiksi tiedostoiksi palvelimelle. Jokaisesta kuvasta tarvitaan erikseen täysikokoinen kuva ja pienennetty kuva. Tietokantaan taas tulee vain viittaus kuvan tiedostonimeen palvelimella. Näin skriptin on helppoa näyttää tarvittavat kuvat sivulla tavallisesti img-tagin avulla.
Tietokannasta kuvan saa tiedostoon näin:
$kuva = $tulosrivi["kuva"]; $tiedosto = fopen("kuva.png", "w"); fwrite($tiedosto, $kuva); fclose($tiedosto);
Kuva muodostuu peräkkäisistä merkeistä aivan kuten kaikki muutkin tiedostot.
jotta voisit näyttää useana kuvana, sinun pitää tehdä esim. toinen tiedosto, mikä näyttää id:n perusteella kuvan.
<img src="nayta_kuva.php?id=3">
tai kirjoittaa johonkin väliaikaistiedostoon tuo $tulosrivi["kuva"].
Koska tulossa on galleria, niin kuvien hallinta on helpompaa, kun tallennat kuvat suoraan hakemistoihin kuvina, ja lisäät tietokantaan kuvien (polun ja) nimen. Tällöin ei tarvitse avata tietokanta yhteyttä liian montaa kertaa useiden kuvien näyttämiseen, ja kuvien näyttämiseen käy yksi funktio.
Käytä esim. md5/sha1-hasheja kuvien/kansioiden nimeämiseen, jottei kuvien nimien löytäminen käsipelillä ole liian helppoa.
edit:
hidas.
eli suunnilleen samaa asiaa kuin Antilla.
edit edit:
Thumbnaileista:
Eli itse olen tykännyt, että kaikki on automatisoitua. Gd-libraryllä saa helposti käsiteltyä yleisiä www-kuvaformaatteja. Taas, koska kyseessä on galleria, niin kuvat eivät pääse muuttumaan "yllättäen", vaan toimintaan tarvitaan aina käyttäjän toimintaa => kannattaa thumbnailit luoda samalla kun käyttäjä lataa kuvan palvelimelle.
Thumbnailit voi nimetä vaikka thumbnail kansioon seuraavalla tavalla
$kuva_id = 3; (jokaisella kuvalla on uniikki id, oli käyttäjä kuka tahansa) $kuvan_nimi = $kuva_id."_".md5("Oma_Galleria_".$kuva_id).".jpg"; luo_peukalonkynsi($kuvan_nimi,$iso_kuva); // luo kuvan isosta kuvasta
Itseasiassa kyllä kaikki kuvat suoraan saa samalle sivulle käyttäen pelkkää htmllää. Base64sella suoraan img tagiin <img src="data:<mime>,base64,<base64 koodattu kuva>" /> en kyllä tiedä miten eri selaimet tukee enkä myöskään onko tuo standardien mukainen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.