Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: readdir() ja . ja ..

Sivun loppuun

Macro [12.09.2009 13:58:39]

#

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?

Antti Laaksonen [12.09.2009 14:00:18]

#

Tulostat varmaan kuvien nimet jonkinlaisessa silmukassa?

Lisää silmukkaan tarkistus, että nimi ei ole "." eikä "..".

Metabolix [12.09.2009 14:00:55]

#

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.

Macro [12.09.2009 14:03:49]

#

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.

Metabolix [12.09.2009 14:05:28]

#

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

Macro [12.09.2009 17:31:26]

#

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ää. ;)

MIB [12.09.2009 18:51:43]

#

Jos muunnat tuolla imagecopyresampledellä sen pieneksi, ja sitten kopioit sen copy() funktiolla tuoksi minunkuva_pieni.jpg:ksi?

Teuro [12.09.2009 19:23:09]

#

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.

Macro [12.09.2009 19:46:20]

#

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.

Metabolix [12.09.2009 21:12:32]

#

Jos kuva on niin suuri, että PHP:n muistirajoitus estää sen käsittelyn, käytännöllisiä tapoja ei juuri ole.

Macro [12.09.2009 22:16:16]

#

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

Metabolix [12.09.2009 22:21:14]

#

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

Macro [13.09.2009 12:02:56]

#

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?

Blaze [13.09.2009 12:19:14]

#

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.

Macro [13.09.2009 17:04:35]

#

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.

Metabolix [13.09.2009 17:20:06]

#

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.

Macro [13.09.2009 17:38:15]

#

Kiitos :) Tämä on juuri tarpeeseen. Auttaa paljon.


Sivun alkuun

Vastaus

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

Tietoa sivustosta