Generovaní náhodneho obrázku.

11 příspěvků

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. Chtěl bych se zeptat jestli by mi někdo neporadil jak vytvořit script který po zadáni URL př.(fotky/dovolena/) načte „link“ (nahodného) obrázku a ten uloží do databáze… (pro později použiti jako náhled galerie). I když sem na netu dost dlouho hledal, tak nic co by mi prosvětlilo můj problém nemám .
  2. <HTML>Já to vidím takto: <ol> <li>zjistím seznam obrázků a jejich počet = n</li> <li>vygeneruju náhodné číslo mezi 0 a n-1, to budiž číslo x</li> <li>obrázek[x] je vámi hledaný obrázek</li></ol></HTML>
  3. //zjistis kolik mas v danem adresari obrazku $m=0; $handle=opendir('./fotky/dovolena'); while (($file = readdir($handle))!==false) { $m++; } closedir($handle); //nevim proc ale vzdy ti to hodi o 2 soubory vice (teda mne jo) tak ty 2 odectes $pocet_obrazku=number_format($m-2); //tedka uz jen vygenerujes nahodnou fotku $nahodna_fotka=rand(0,$pocet_obrazku); //tedka uz jen zobrazis nahodnou fotku echo "<img src=lala.cz/fotky/dovolena/$nahodna_fotka.JPG"; Ulozeni do databaze ti vysvetlovat nebudu, to snad uz zvladnes ;)
  4. <HTML><em>//nevim proc ale vzdy ti to hodi o 2 soubory vice (teda mne jo) tak ty 2 odectes</em> Tak bych doporučoval to rychle vypátrat. Dále nechápu smysl použití funkce number_format(). Mnohem čistší řešení prvních cca 8 řádků: <code> $pocet_obrazku=0; $handle=opendir('./fotky/dovolena'); while (($file = readdir($handle))!==false) {   if($file != '.' && $file != '..') $pocet_obrazku++; } closedir($handle); </code> K další části kódu: Martn předpokládá, že jsou fotky pojmenovány 1.JPG, 2.JPG atd. To nemusí být pravda. Proto celý skript je třeba přepsat takto: <code> $pocet_obrazku=0; $obrazky = array(); $handle=opendir('./fotky/dovolena'); while (($file = readdir($handle))!==false) {   if($file != '.' && $file != '..') {     $pocet_obrazku++;     $obrazky[] = $file;   } } closedir($handle); $x = rand(0, $pocet_obrazku); echo('<img src="./fotky/dovolena/'.$obrazky[$x].'">'); </code> Je tu však stále jeden problém - v adresáři musí být pouze obrázky. Jinak je potřeba vnitřní podmínku cyklu upravit třeba na substr($file, -4) == '.jpg' nebo tak nějak.</HTML>
  5. Pánove děkuju moc :)
  6. jeste snad poznamku: proc zbytecne v kazde iteraci cyklu inkrementovat pocet_obrazku, kdyz pak muzem jednou udelat count($obrazky)
  7. Pokud v adresari mas jen obrazky, tak si dej pozor na kopirovani na server - teda jen pokud mas windowsy (vytvari skryte zbytecne thumbs.db soubory,ktery by ti pak mohl delat neplechu ;) ) =Martn= Ten to cislo zvetseno o 2 je zpusobeno tim, ze funkce opendir() ti vrati i . (jako aktualni adresar) a .. (jako rodicovsky-nadrazeny adresar). =Tonik= Jak psal Martn, musis pak jeste odecist 2 (prave kvuli . a ..). Ale je to nejlepsi reseni (pokud v adresari jsou jen obrazky ..)
  8. <HTML>Freeze: tak zrovna tvoje připomínky jsem předem dávno zpracoval ve svém příspěvku, stačí si ho přečíst. Tonik: dobrý postřeh.</HTML>
  9. já používám tohle - soubor random_img.php: $random_img = Explode(",", $_SERVER['QUERY_STRING']); $rand = Rand(1, Count($random_img)) - 1; $img = page_root.$random_img[$rand]; if(File_Exists($img)) { $size = GetImageSize($img); if(Is_Numeric($size[2]) && $size[2] < 17 && $size[2] > 0) { Header("Content-type: {$size['mime']}"); $open = FOpen($img, 'r'); FPassThru($open); FClose($open); } else { Header('Content-Type: image/jpeg'); ReadFile(error_img); exit; } } else { exit; } konstanty page_root a error_image je třeba nahradit kořenem stránek a cestou k chybovému obrázku 404. Stačí pak například použít tag <img src=random_img.php?a_01.png,a_05.png,a_06.png> a ono to zobrazí náhodný obrázek s toho použitého seznamu. Nevýhoda je nutnost vygenerování toho seznamu (lze ale snadno upravit). Jinak to lze použít i v statických HTML nebo css dokumentech.
  10. Panové vim že to asi bude o5 úplná maličkost ale i přesto vás chci poprosit o pomoc. Potřeboval bych přidat do podmínky substr($file, -4) == '.jpg' je to pro výběr .jpg souboru z adresáře, popisoval to Nípal ale nějak sem nepochopil. Spiš neumím to. <?PHP $pocet_obrazku=0; $handle=opendir('./dovolena'); while (($file = readdir($handle))!==false) { if($file != '.' && $file != '..') $pocet_obrazku++; } closedir($handle); $pocet_obrazku=0; $obrazky = array(); $handle=opendir('./dovolena'); while (($file = readdir($handle))!==false) { if($file != '.' && $file != '..') { $pocet_obrazku++; $obrazky[] = $file; } } closedir($handle); $x = rand(0, $pocet_obrazku); echo('<img src="./dovolena/'.$obrazky[$x].'">'); ?>
  11. Tak třeba ten první příklad, který uvádíš: $pocet_obrazku=0; $handle=opendir('./dovolena'); while (($file = readdir($handle))!==false) { if(substr($file, -4) == '.jpg') $pocet_obrazku++; } closedir($handle); vzhledem k tomu, že je určen konkrétní typ souboru tak není potřeba filtrovat ty dva adresáře a stačí odfiltrovat je to, co má na konci '.jpg'. Jen by bylo asi vhodné ošetřit možnou různou velikost písmen - záleží na kontextu, tak např.: $pocet_obrazku=0; $handle=opendir('./dovolena'); while (($file = readdir($handle))!==false) { if(substr(strtoupper($file), -4) == '.JPG') $pocet_obrazku++; } closedir($handle);

← Zpět na všechna témata