Morjensta taas!
Teen kuvagalleriaa sivulleni, ja kuvat haen tietystä hakemistosta. Nyt pitäisi vaan saada tämän readdirin tulostamat . ja .. kansiot pois. Miten pystyisin ohittamaan tämä tulostukset, ja tulostaisin vain kuvien nimet kansiosta?
Tulostat varmaan kuvien nimet jonkinlaisessa silmukassa?
Lisää silmukkaan tarkistus, että nimi ei ole "." eikä "..".
Oletko kuullut if-lauseesta? Voit myös käyttää glob-funktiota, jolla voi suoraan valita, millaiset tiedostonimet listataan; esimekiksi glob("kuvat/*.jpg")
palauttaisi sellaisia nimiä kuin kuvat/1.jpg ja kuvat/testi.jpg.
Ainiin... Tietenkin tuolla if-lauseella. Anteeksi tästä.
Muuten, kuvia kun pienennetään, niin niistä ei tule mitään mahtavia. Miten saisin kuvan laadun paremmaksi? Pitäisi saada kuvat kokoon 100 x 100, ja sitten niistä linkit suureen kuvaan.
Tee kuvien pienemmät versiot resamplella äläkä resizellä. (Jos luotat selaimen toimintaan eli määräät vain CSS:llä kuvan koon, et voi juuri vaikuttaa asiaan.)
Jep, tuolla saa, mutta se ei ole mikään mahtavan hyvä. Jos minulla on suuri kuva, niin Apacheni tekee errorin ja meinaa sammua.
Tuolla koodivinkeissä on soodan tekemä kuvagalleria, joka nähtävästi osaa muuttaa nämä oikeaan kokoon. En vain saanut selvää koodista, että voisin muokata omaan käyttöön sopivan. Kuvat pitäisi samalla tavalla tallentaa, mutta jos on kuva minunkuva.jpg, niin se pitäisi muuttaa pieneksi ja nimetä minunkuva_pieni.jpg:ksi.
Voisikos joku kertoa, miten saisin tehtyä? Eli, ei tuota PHP:n imagecopyresampledä tuollaisenaan, kun Apacheni ei tykkää. ;)
Jos muunnat tuolla imagecopyresampledellä sen pieneksi, ja sitten kopioit sen copy() funktiolla tuoksi minunkuva_pieni.jpg:ksi?
Niin siis ethän sinä yritä lennossa muokata tuota kuvadataa? Muutoshan tehdään vain kerran, kun kuvat ladataan palvelimelle. Muutoin palvelin todellakin tukehtuu tuohon kuvadatan käsittelyyn, koska nuo ilmoittamasi kuvan mitat ovat aikasta paljon liian suuret web-käyttöön.
MIB: Ei onnistunut.
Teuro: Perjaatteessa. Koitan saada koodin tallentamaan kuvat pienessä koossa, mutta en ole vielä onnistunut. Osaisitko kertoa miten saan tehtyä samanlaiset kuvakoot kuin koodivinkeissä soodan kuvagalleriassa? En saanut koodista oikein selvää, katsos.
Jos kuva on niin suuri, että PHP:n muistirajoitus estää sen käsittelyn, käytännöllisiä tapoja ei juuri ole.
Voin muuttaa muistin rajoitusta ylöspäin, mutta miten tallennan koodin vääntämät pienet kuvat (esim. kuva.jpg:n pieni versio olisi kuva_pieni.jpg)?
<?php $f_suuri = "kuva.jpg"; $f_pieni = preg_replace('/(.+)\\.(.+)/', '$1.pieni.$2', $f); // kuva.pieni.jpg // if ($f_pieni == $f_suuri) die("Virheellinen tiedostonimi!"); $suuri = imagecreatefromjpeg($f_suuri); // $pieni = ... imagejpeg($pieni, $f_pieni);
Jep, tuolla preg_replacella saa sen nimen uudelle kuvalle, mutta en tajua tuota loppua. $f_suuri on ensin jokin kuva, ja sitten luodaan uudelleen kuva siitä. Sitten tehdään tuolla imagejpeg:llä jotain, mikä ei ole mahdollista.
Jos muunnan imagecopyresampledellä kuvan pieneksi, ja tallennan sen, mutta miten sen pienen kuvan tallentaminen onnistuu?
Macro kirjoitti:
$f_suuri on ensin jokin kuva
Ei ole kuin tiedostonimi. Siinähän se ekalla rivillä asetetaan.
Macro kirjoitti:
Jos muunnan imagecopyresampledellä kuvan pieneksi, ja tallennan sen, mutta miten sen pienen kuvan tallentaminen onnistuu?
Tuolla imagejpeg-funkkarilla.
Blaze kirjoitti:
Macro kirjoitti:
$f_suuri on ensin jokin kuva
Ei ole kuin tiedostonimi. Siinähän se ekalla rivillä asetetaan.
Minun moka, pahoitteluni.
Blaze kirjoitti:
Macro kirjoitti:
Jos muunnan imagecopyresampledellä kuvan pieneksi, ja tallennan sen, mutta miten sen pienen kuvan tallentaminen onnistuu?
Tuolla imagejpeg-funkkarilla.
Katsos, empä älynnyt kelata noin alas ja katsoa kolmatta esimerkkiä. Kiitos tästä, mutta en saa pienennettyä enään kuvaa. Aivot ovat viellä lomalla, mutta huomenna ne varmaan tulevat takaisin.
Tässä on toteutettu oikeat asiat riville // $pieni = ...
:
<?php $f_suuri = "kuva.jpg"; $f_pieni = preg_replace('/(.+)\\.(.+)/', '$1.pieni.$2', $f); // kuva.pieni.jpg // if ($f_pieni == $f_suuri) die("Virheellinen tiedostonimi!"); $suuri = imagecreatefromjpeg($f_suuri); // $pieni = ... $suuri_w = imagesx($suuri); $suuri_h = imagesy($suuri); $pieni_w = 160; $pieni_h = 120; if ($suuri_w <= $pieni_w && $suuri_h <= $pieni_h) { // Jos kuva on jo tarpeeksi pieni, ei muuteta. $pieni = $suuri; } else { // Muuten pienennetään. // Säilytetään kuitenkin kuvasuhde: $pieni_w2 = (int) round($pieni_h * $suuri_w / $suuri_h); $pieni_h2 = (int) round($pieni_w * $suuri_h / $suuri_w); if ($pieni_w2 < $pieni_w) { $pieni_w = $pieni_w2; } else { $pieni_h = $pieni_h2; } // Kopioidaan kuva: $pieni = imagecreatetruecolor($pieni_w, $pieni_h); imagecopyresampled($pieni, $suuri, 0, 0, 0, 0, $pieni_w, $pieni_h, $suuri_w, $suuri_h); } imagejpeg($pieni, $f_pieni);
En testannut, joten kirjoitusvirheiden korjaus jää kotitehtäväksesi.
Kiitos :) Tämä on juuri tarpeeseen. Auttaa paljon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.