Projektowanie stron WWW od podszewki

Artykuły na każdy temat

[PHP] Losowy obrazek

Dodano 10.07.2009r. o 07:20
Czasami zachodzi potrzeba wylosowania obrazka z zdefiniowanej listy bądź z określonego katalogu. Tutaj zostaną rozwiane wszystkie wątpliwości.

Pierwsza przedstawiona metoda losuje obrazek z listy.
Kod:
<?php
// Tablica ze zdefiniowanymi obrazkami do losowania
$cfg['list'] = array('img1.png''img2.png''img3.png');
$cfg['dir_images'] = 'images';

// Jeżeli wersja PHP < 4.2.0 wtedy zachodzi potrzeba użycia generator liczb losowych
// srand(floor(time() / (60*60*24)));

// Losowanie
$tmp['img'] = $cfg['list'][array_rand($cfg['list'])];

echo '<img src="'.$cfg['dir_images'].'/'.$tmp['img'].'" alt="Tekst alternatywny" />';
?>
Poniższy przykład daje możliwość losowania obrazka ze zdefiniowanego katalogu oraz przy ustalonych rozszerzeniach plików graficznych.
Kod:
<?php
$cfg['dir_images'] = 'images';
$cfg['expansions'] = array('png''gif''jpg');

// Jeżeli wersja PHP < 4.2.0 wtedy zachodzi potrzeba użycia generator liczb losowych
// srand(floor(time() / (60*60*24)));

// Losowanie
$tmp['randed_img']['name_file'] = $tmp['img'][array_rand($tmp['img'] = glob('./'.$cfg['dir_images'].'/*.{'.implode(','array_unique(array_map('strtolower'$cfg['expansions']))).'}'GLOB_BRACE))];
$tmp['randed_img']['file_info'] = getimagesize($tmp['randed_img']['name_file']);
// Throw
echo '<img src="'.$tmp['randed_img']['name_file'].'" '.$tmp['randed_img']['file_info'][3].' alt="Tekst alternatywny" />';
?>
Ten kod daję możliwość losowania zdjęcia z drobnym wyjątkiem, mianowicie można zdefiniować kilka folderów, w których ma szukać obrazków.
Kod:
<?php
$cfg['dir_images'] = array('images''images2');
$cfg['expansions'] = array('png''gif''jpg');

$tmp['file_list'] = glob('./{'.implode(','$cfg['dir_images']).'}/*.{'.implode(','array_unique(array_map('strtolower'$cfg['expansions']))).'}'GLOB_BRACE);
$tmp['how']['images'] = count($tmp['file_list']);

// Jeżeli wersja PHP < 4.2.0 wtedy zachodzi potrzeba użycia generator liczb losowych
// srand(floor(time() / (60*60*24)));

// Losowanie
$tmp['randed_img']['name_file'] = $tmp['file_list'][array_rand($tmp['file_list'])];
$tmp['randed_img']['file_info'] = getimagesize($tmp['randed_img']['name_file']);
// Throw
echo '<img src="'.$tmp['randed_img']['name_file'].'" '.$tmp['randed_img']['file_info'][3].' alt="Tekst alternatywny" />';
?>
Poniższy skrypt daje możliwość losowania kilku obrazków nie powtarzających się z jednego lub kilku folderów.
Kod:
<?php
$cfg['dir_images'] = array('images''images2');
$cfg['expansions'] = array('png''gif''jpg');
$cfg['how']['rand'] = 3;

$tmp['file_list'] = glob('./{'.implode(','$cfg['dir_images']).'}/*.{'.implode(','array_unique(array_map('strtolower'$cfg['expansions']))).'}'GLOB_BRACE);
$tmp['how']['images'] = count($tmp['file_list']);
$tmp['randed_file_list'] = array();

if($tmp['how']['images'] > 0)
{
 if($cfg['how']['rand'] >= $tmp['how']['images'] && $cfg['how']['rand'] != 1)
 {
  $tmp['how']['rand'] = $cfg['how']['rand'] - 1;
 }
 else
 {
  $tmp['how']['rand'] = $cfg['how']['rand'];
 }

 // Jeżeli wersja PHP < 4.2.0 wtedy zachodzi potrzeba użycia generator liczb losowych
 // srand(floor(time() / (60*60*24)));

 for($h 0$h $tmp['how']['rand']; ++$h)
 {
  $tmp['randed_file_list'][] = $tmp['randed']['img'] = $tmp['file_list'][array_rand($tmp['file_list'])];
  $tmp['key'] = array_search($tmp['randed']['img'], $tmp['file_list']);
  unset($tmp['file_list'][$tmp['key']]);
 }

 for($h 0$h $tmp['how']['rand']; ++$h)
 {
  $tmp['file_info'] = getimagesize($tmp['randed_file_list'][$h]);
  // Throw
  echo '<img src="'.$tmp['randed_file_list'][$h].'" '.$tmp['file_info'][3].' alt="Tekst alternatywny" /><br />';
 }
}
else
{
 echo 'Brak obrazków';
}
?>
Przykłady do ściągnięcia znajdują się tutaj.

Więcej informacji na:
http://php.net/manual/pl/function.array-rand.php
http://php.net/manual/pl/function.array-search.php
http://php.net/manual/pl/function.count.php
http://php.net/manual/pl/function.getimagesize.php
http://php.net/manual/pl/function.glob.php
http://php.net/manual/pl/function.implode.php
http://php.net/manual/pl/function.unset.php

Komentarze

Publikowane komentarze są prywatnymi opiniami użytkowników serwisu. Serwis nie ponosi odpowiedzialności za treść opinii. W trosce o zachowanie poziomu dyskusji wszystkie komentarze podlegają akceptacji przed ich publikacją dlatego proszę cierpliwie czekać aż komentarz zostanie opublikowany.

CapaciousCore

Dodano 26.09.2015r. o 17:48
@Semerchet Odnośnie problemu związanego z wielkością pliku wystarczy zastosować instrukcje warunkową oraz funkcje filesize(). Jeżeli chodzi o pomijanie plików to zależy jak masz zbudowaną strukturę. Jeżeli miniaturki mają prefiks to jest to stosunkowo proste. Domniemywam, że masz wszystko w jednym folderze co jest poniekąd błędem. Jeżeli nie posiadają prefiksu to sprawa trochę komplikuje się. Można pokusić się o sprawdzanie plików graficznych względem szerokości i wysokości, a następnie odsiewać niespełniające kryteriów.

Semerchet

Dodano 30.03.2014r. o 11:35
Co należy dodać aby pokazywały obrazki od pewnych wielkości - większe niż 30 KB?

Semerchet

Dodano 19.03.2014r. o 18:53
A jak zrobić aby pomijało pewne pliki - np. miniaturki, inne ikonki?

CapaciousCore

Dodano 06.07.2012r. o 10:18
@Piotrek dlatego właśnie o ile dobrze pamiętam używałem tam array_map('strtolower', $cfg['expansions']). Najlepiej w kliencie FTP mieć taki myk, że rozszerzenia zmieni Ci na małe litery.

Piotrek

Dodano 06.07.2012r. o 09:57
Już sobie poradziłem. Problem polegał na tym, że były to zdjęcia z aparatu i miały rozszerzenie "JPG", a nie "jpg" ;]

Piotrek

Dodano 06.07.2012r. o 09:46
Nie wiem co jest nie tak ale wgrałem na stronę ostatni skrypt i nie czyta formatu .jpg. Z czym to może być związane?

CapaciousCore

Dodano 26.02.2012r. o 12:18
@janek Moim zdaniem najlepiej aby przy wgrywaniu zdjęć na serwer była funkcja tworząca miniaturki. Za każdym razem sprawdzanie czy miniaturka istnieje nie ma sensu.

janek

Dodano 25.02.2012r. o 19:13
A jak zrobic aby wyswietlane obrazki byly zmieniane do odp[owiedniej wielkosci bo mam w katalogu na serwerze rozne wielkosci a chce aby byly wyswietlane na stronie glownej w formie miniaturek.

oiKrzysiek

Dodano 04.07.2011r. o 00:14
Przydatna rzecz!! Jeżeli komuś nie chce się tego pisać od początku, a dla tych co nie potrafią - niech się uczą na właśnie takich przykładach! (no chociaż więcej komentarzy do kodu dla niektórych by się przydało hehe)
W każdym razie - PRZYDATNA RZECZ!
Pozdrawiam staropolskim Oi! ;)

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)