/** * HUOM! Tallentaa pikkukuvat tietokantaan ja alkuperäisen eri kansioon! * Kuvan tiedot on tarkistettu ennen tänne tuloa, * joten niitä ei tarkemmin tarkisteta täällä. * * SQL: * create table kuvat ( id mediumint auto_increment not null, henkilo_id tinyint not null, kuvaotsikko varchar(200), kuvaselitys varchar(5000), vuosi smallint default 0, kk tinyint default 0, paiva tinyint default 0, src varchar(300), leveys smallint not null, korkeus smallint not null, tiedostokoko int not null, tiedostotunnus varchar(20) not null, tiedostonimi varchar(100) not null, tallennusaika_sek int default 0, minikuva1 longblob, minikuva2 longblob, primary key (id), index(henkilo_id), index(tallennusaika_sek), index(jarjestysluku) ); * * Tallentaa kuvan ja palauttaa taulukon, jonka ensimmäinen alkio on * palautte tallennuksen onnistumisesta ('onnistui' tai virheilmoitus) ja toinen * tallennetun kuvan id:n, jotta uusi kuva osataan näyttää heti. * * @param Parametrit $parametriolio * @return Array Palautetaulukko */ public static function tallenna_kuva($parametriolio) { $omaid = $parametriolio->omaid; $uuden_kuvan_id = -1; //$_FILES['ladattu_kuva']: $ladattu_kuva = $parametriolio->ladattu_kuva; $kuvaotsikko_kuva = $parametriolio->kuvaotsikko_kuva; $kuvaselitys_kuva = $parametriolio->kuvaselitys_kuva; $vuosi_kuva = $parametriolio->vuosi_kuva; $kk_kuva = $parametriolio->kk_kuva; $paiva_kuva = $parametriolio->paiva_kuva; $tietokantaolio = $parametriolio->tietokantaolio; $id_lj = -1; // bongausalbumeiden näyttöä varten tarvitaan tämä. // Antaa sen kansion suhteellisen tiedostopolun, // jonne ladattu tiedosto on tarkoitus siirtää pysyvää sijoitusta varten. $latauskansio = $parametriolio->get_kuvien_kansio_osoite(); // Vastaava pikkukuville: $pikkukuvakansio = $parametriolio->get_pikkukuvien_kansio_osoite(); $palautustaulukko = array(); $palaute = ""; $taulu = "kuvat"; $sarakenimi_kuvataulukko = array('henkilo_id', 'kuvaotsikko', 'kuvaselitys', 'vuosi', 'kk', 'paiva', 'src', 'leveys', 'korkeus', 'tiedostokoko', 'tiedostotunnus', 'tiedostonimi', 'tallennusaika_sek', 'minikuva1', 'minikuva2'); if ($ladattu_kuva['tmp_name'] == "") { $palaute = "\$ladattu_kuva['tmp_name'] on tyhjä!"; } else { $kuvatietotaulukko = getImageSize($ladattu_kuva['tmp_name']); $leveys = $kuvatietotaulukko[0]; $kork = $kuvatietotaulukko[1]; // Tiedostotunnisteet: $tunniste = $kuvatietotaulukko[2]; //gif = 1/jpg = 2/png = 3/... //$html_lev_ja_kork = $kuvatietotaulukko[3]; // "height='333' width='455'" $koko = $ladattu_kuva['size']; // Koko tavuina (ilm.) if (!(is_numeric($leveys) && is_numeric($kork) && is_numeric($tunniste))) { $palaute = "getImageSize(\$ladattu_kuva['tmp_name'])-\n palautearvotaulukossa lev, kork tai tunniste\n epälukuja! (lev: " . $leveys . ", kork: " . $kork . "\n ja tunniste: " . $tunniste . ")"; return $palaute; } /**********************************************************************/ // Alla olevat liittyvät kuvan tallentamiseen tietokantaan tms: //$kuva = file_get_contents("vikakuva.img"); /*$instr = fopen("vikakuva.img","rb"); $kuva = addslashes(fread($instr,filesize("vikakuva.img")));*/ // TÄMÄKIN TOIMII: /*$instr = fopen($ladattu_kuva['tmp_name'],"rb"); $kuva = addslashes(fread($instr,filesize($ladattu_kuva['tmp_name'])));*/ /***********************************************************************/ // Kuvan nimeen lisätään tallennusaika sekunteina, jottei // duplikaatteja syntyisi. Samannimisiä kuvia voi kuitenkin tulla. // Kuvan tiedostonimeä ei muuteta. $tiedostonimi = time() . "_" . $ladattu_kuva['name']; $kohdeosoite = $latauskansio . "/" . $tiedostonimi; // Tiedostopolku minikuviin: eri kansio pikkukuville // ja lisätään nimeen miniloppu: $kohdeosoite_mini1 = $pikkukuvakansio . "/" . Kuva::$pikkukuva1_nimen_osa . $tiedostonimi; $kohdeosoite_mini2 = $pikkukuvakansio . "/" . Kuva::$pikkukuva2_nimen_osa . $tiedostonimi; $kohdeosoite_mini3 = $pikkukuvakansio . "/" . Kuva::$pikkukuva3_nimen_osa . $tiedostonimi; // IDEA: PIENENNÄ ENSIN 1600 -> 700 -> 400 -> 150 NIIN MENNEE // NOPSEMMIN. KUVALAATU SÄILYY IHAN OK! /******************************************************************/ /******************************************************************/ /* TÄSSÄ KUVAN KOKO TARKISTETAAN JA KUVA PIENENNETÄÄN, ETTEI * ÄLYTTÖMIÄ TULE. YLI 300 KT:N KUVAT PIENENNETÄÄN 1600 PIKSELIN * KOKOON, JOLLOIN MYÖS KUVAKOKO PIENENTYY. */ if ($koko > Kuva::$KUVALATAUS_RAJAKOKO) { $max_mitta = Kuva::$KUVATALLENNUS_PIENENNOSMITTA; if (Kuva::muuta_kuvan_koko($ladattu_kuva['tmp_name'], $max_mitta, $kohdeosoite, 75)) { // Haetaan pienennetyn kuvan uudet tiedot: $kuvatietotaulukko = getImageSize($kohdeosoite); $leveys = $kuvatietotaulukko[0]; $kork = $kuvatietotaulukko[1]; // Tiedostotunnisteet: $tunniste = $kuvatietotaulukko[2]; //gif = 1/jpg = 2/png = 3/... $koko = filesize($kohdeosoite); // } else { // Ellei onnistu, tallennetaan alkuperäinen: $kuvatiedosto = $ladattu_kuva['tmp_name']; move_uploaded_file($kuvatiedosto, $kohdeosoite); } } else { // Ellei pienennöstarvetta ole. $kuvatiedosto = $ladattu_kuva['tmp_name']; move_uploaded_file($kuvatiedosto, $kohdeosoite); } // Tehdään ensin 700 pikselin pienennös. Tätä ei tallenneta // tietokantaan, koska on suht iso kuitenkin. $max_mitta = Kuva::$TIETOKANTAKUVA_ISO2_MITTA; if (Kuva::muuta_kuvan_koko($kohdeosoite, $max_mitta, $kohdeosoite_mini3, 75)) { // Pienennetään sitten tätä kuvaa seuraavaan kokoluokkaan: $max_mitta = Kuva::$TIETOKANTAKUVA_ISO_MITTA; // Tänne kopioidaan pienennös, koska en keksinyt, miten muuten // kuvan saa tietokantaan: $kuvatiedosto = "../temp/muokkaus2.jpg"; if (Kuva::muuta_kuvan_koko($kohdeosoite_mini3, $max_mitta, $kuvatiedosto, 75)) { $minikuva2 = mysql_real_escape_string(file_get_contents($kuvatiedosto)); // Kopioidaan sama kuva myös kuvana tiedostoon, koskapa // tietokannasta haku oli toivottoman hidasta! copy($kuvatiedosto, $kohdeosoite_mini2); // Pienennetään sitten tätä kuvaa seuraavaan kokoluokkaan: $max_mitta = Kuva::$TIETOKANTAKUVA_PIENI_MITTA; $kuvatiedosto = "../temp/muokkaus1.jpg"; // Tänne kopioidaan pienennös // Luku tarkoittaa %:n laatua. Oletus on 75%. if (Kuva::muuta_kuvan_koko($kohdeosoite_mini2, $max_mitta, $kuvatiedosto, 75)) { $minikuva1 = mysql_real_escape_string(file_get_contents($kuvatiedosto)); // Kopioidaan sama kuva myös kuvana tiedostoon, koskapa // tietokannasta haku oli toivottoman hidasta! copy($kuvatiedosto, $kohdeosoite_mini1); } else { // Ellei minikuva1 onnistunut: $minikuva1 = ""; } } else { $minikuva2 = ""; } } else { // Ellei minikuva3:kaan onnistunut: $minikuva1 = ""; $minikuva2 = ""; } $henkilo_id = $omaid; $tallennusaika_sek = time(); $arvotaulukko = array($henkilo_id, $kuvaotsikko_kuva, $kuvaselitys_kuva, $vuosi_kuva, $kk_kuva, $paiva_kuva, $kohdeosoite, $leveys, $kork, $koko, $tunniste, $tiedostonimi, $tallennusaika_sek, $minikuva1, $minikuva2); // Palauttaa merkkijonon 'onnistui', jos tallennus onnistuu. $virheilmoitus = "Virhe kuvatietojen tallennuksessa (tallenna_kuva2)!"; $onnistuikos = $tietokantaolio->tallenna_uusi_rivi($taulu, $sarakenimi_kuvataulukko, $arvotaulukko, $virheilmoitus); if ($onnistuikos == Tietokantaolio::$HAKU_ONNISTUI) { // Jos onnistui, lisätään linkki albumin ja kuvan välille. // Ainakin bongauksissa voidaan linkkejä tehdä monta kerralla. $uuden_kuvan_id = mysql_insert_id(); $parametriolio->id_kuva = $uuden_kuvan_id; $onnistuiko_linkki = Kuva::tallenna_kuvalinkit($parametriolio); if ($onnistuiko_linkki === Kuva::$OPERAATIO_ONNISTUI) { $palaute = 'onnistui'; } else { $palaute = 'Kuvan tallennus ok, mutta linkin tallennus ei onnistunut!<br>' . $onnistuiko_linkki; $uuden_kuvan_id = ""; // Uusi kuva ei kuitenkaan löydy. } // Aktiivisuusmerkintä: $viimeksi_aktiivi = time(); $aktiivisuuslaji = Aktiivisuus::$KUVAN_LUOMINEN; paivita_aktiivisuus($omaid, $tietokantaolio, $viimeksi_aktiivi, $aktiivisuuslaji); } else { // Ellei kuvan tallennus onnistunut: $uuden_kuvan_id = ""; $palaute = $onnistuikos; } } array_push($palautustaulukko, $palaute, $uuden_kuvan_id); return $palautustaulukko; }
function luo_bongauspikkukuvat_muutos_maalis2011($tietokantaolio) { // Haetaan ensin kansion sisältämien kuvien tiedot: $kuva_id_taulukko = hae_bongauskuvien_idt($tietokantaolio); $onnistuneiden_muokkausten_lkm = 0; // Haetaan sitten kuvat yksi kerrallaan ja kopioidaan sitten kuvan // pienennettyjä versioita sekä tietokantaan (2kpl) ja pikkukuviin (3kpl). for ($i = 0; $i < sizeof($kuva_id_taulukko); $i++) { // Voidaan hakea kaikki tiedot, koska näillä ei edes pikkukuvia // pitäisi olla. $taulunimi = "kuvat"; $sarakenimi = "id"; $hakuarvo = $kuva_id_taulukko[$i]; $kuvaolio = $tietokantaolio->hae_eka_osuma_oliona($taulunimi, $sarakenimi, $hakuarvo); if ($kuvaolio != Tietokantaolio::$HAKU_PALAUTTI_TYHJAN) { // Kuvan tiedostonimeä ei muuteta. $tiedostonimi = $kuvaolio->tiedostonimi; $kuvaosoite = $kuvaolio->src; // Tiedostopolku minikuviin: eri kansio pikkukuville // ja lisätään nimeen miniloppu: $kohdeosoite_mini1 = Kuva::$kansion_os_bongauskuvat_pikkukuvat . "/" . Kuva::$pikkukuva1_nimen_osa . $tiedostonimi; $kohdeosoite_mini2 = Kuva::$kansion_os_bongauskuvat_pikkukuvat . "/" . Kuva::$pikkukuva2_nimen_osa . $tiedostonimi; $kohdeosoite_mini3 = Kuva::$kansion_os_bongauskuvat_pikkukuvat . "/" . Kuva::$pikkukuva3_nimen_osa . $tiedostonimi; // IDEA: PIENENNÄ ENSIN 1600 -> 700 -> 400 -> 150 NIIN MENNEE // NOPSEMMIN. KUVALAATU PITÄÄ KATSOA, JOTTA SÄILYY. IHAN OK! /******************************************************************/ /******************************************************************/ // Tehdään ensin 700 pikselin pienennös. Tätä ei tallenneta // tietokantaan, koska on suht iso kuitenkin. $max_mitta = Kuva::$TIETOKANTAKUVA_ISO2_MITTA; if (Kuva::muuta_kuvan_koko($kuvaosoite, $max_mitta, $kohdeosoite_mini3, 75)) { // Pienennetään sitten tätä kuvaa seuraavaan kokoluokkaan: $max_mitta = Kuva::$TIETOKANTAKUVA_ISO_MITTA; // Tänne kopioidaan pienennös, koska en keksinyt, miten muuten // kuvan saa tietokantaan: $kuvatiedosto = "../temp/muokkaus2.jpg"; if (Kuva::muuta_kuvan_koko($kohdeosoite_mini3, $max_mitta, $kuvatiedosto, 75)) { $minikuva2 = mysql_real_escape_string(file_get_contents($kuvatiedosto)); // Kopioidaan sama kuva myös kuvana tiedostoon, koskapa // tietokannasta haku oli toivottoman hidasta! copy($kuvatiedosto, $kohdeosoite_mini2); // Pienennetään sitten tätä kuvaa seuraavaan kokoluokkaan: $max_mitta = Kuva::$TIETOKANTAKUVA_PIENI_MITTA; $kuvatiedosto = "../temp/muokkaus1.jpg"; // Tänne kopioidaan pienennös // Luku tarkoittaa %:n laatua. Oletus on 75%. if (Kuva::muuta_kuvan_koko($kohdeosoite_mini2, $max_mitta, $kuvatiedosto, 75)) { $minikuva1 = mysql_real_escape_string(file_get_contents($kuvatiedosto)); // Kopioidaan sama kuva myös kuvana tiedostoon, koskapa // tietokannasta haku oli toivottoman hidasta! copy($kuvatiedosto, $kohdeosoite_mini1); // Päivitetään pikkukuvat tietokantaan: // Kyselyparametrit: $taulu = "kuvat"; $muutossarakkeet = array('minikuva1', 'minikuva2'); $muutosarvot = array($minikuva1, $minikuva2); $ehtosarake = "id"; $ehtoarvo = $kuva_id_taulukko[$i]; $max_muutosrivilkm = 1; // Muutetaan max yhtä riviä. $muokkaus = $tietokantaolio->tee_UPDATEhaku($taulu, $muutossarakkeet, $muutosarvot, $ehtosarake, $ehtoarvo, $max_muutosrivilkm); // Jos tämäkin ok: if (mysql_affected_rows() == 1) { $onnistuneiden_muokkausten_lkm++; } } } } } // if-lauseen "jos kuva löytyi" loppu } // For-lauseen loppu if (sizeof($kuva_id_taulukko) == $onnistuneiden_muokkausten_lkm) { $palaute = "Kaikki " . $onnistuneiden_muokkausten_lkm . " bongauskuvaa on\n pienennetty ja kustakin viisi kopiota tallennettu!"; } else { $palaute = $onnistuneiden_muokkausten_lkm . " bongauskuvaa muokattu, mutta " . (sizeof($kuva_id_taulukko) - $onnistuneiden_muokkausten_lkm) . " kuvan kohdalla toiminto EI ONNISTUNUT!"; } return $palaute; }