Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] losowanie zdjęć
Forum PHP.pl > Forum > Przedszkole
Banzaj
Witam.

Nie potrafię sobie poradzić ze stworzeniem kodu który będzie mi wyświetlał 4 różne, losowo wybrane zdjęcia z podanego folderu.

Na tą chwilę mam coś takiego:

  1. <?php
  2. $iw = 223;
  3. $ih = 149;
  4. $folder = opendir("assets/do_galerii//");
  5. $i = 0;
  6. header('content-type: image/jpeg');
  7.  
  8. while(false !=($plik = readdir($folder))){
  9. if($plik != "." && $plik != ".."){
  10. $obrazki[$i]= $plik;
  11. $i++;
  12. }
  13. }
  14. closedir($folder);
  15. $losowy=rand(0,count($obrazki)-1);
  16. //$obrazek = file_get_contents("assets/do_galerii/".$obrazki[$losowy]);
  17. //echo '<img src="assets/do_galerii/'.$obrazki[$losowy].'" width="223" height="149" alt="" />';
  18. $img_src = imagecreatefromjpeg( "assets/do_galerii/".$obrazki[$losowy] );
  19. $img_dst = imagecreatetruecolor( $iw, $ih );
  20. $is = getimagesize( "assets/do_galerii/".$obrazki[$losowy] );
  21. imagecopyresampled( $img_dst, $img_src, 0, 0, 0, 0, $iw, $ih, $is[0], $is[1] );
  22.  
  23.  
  24. imagejpeg($img_dst);
  25. ?>


Obrazki są różnej wielkości stąd odgórnie narzucane rozmiary.
Chciałbym teraz by losowane były 4 i wyświetlane obok siebie. Świetnie byłoby gdyby każdy z nich był odnośnikiem do zdjęcia w pełnych rozmiarach.
mortus
A o array_rand słyszałeś?
EDIT: Choć raczej to nie wystarczy i będziesz musiał całkiem przerobić kod.
thek
Coś mi się widzi, że będzie musiał zrobić losowanie z katalogu czterech plików i potem stworzyć linki do nich nieco przerobioną wersją powyższego, który już nie będzie sam w sobie robił nic innego niż wyświetlał je.
mortus
Potrzebne Ci będą dwa pliki:
np. index.php:
  1. <?php
  2. ini_set('display_errors', 1);
  3.  
  4. $_galleryPath = 'galeria/';
  5. $folder = opendir($_galleryPath);
  6. while (false != ($plik = readdir($folder))) {
  7. if ($plik != "." && $plik != "..") {
  8. $obrazki[] = $plik;
  9. }
  10. }
  11. closedir($folder);
  12. $wylosowane = array_rand($obrazki, 4);
  13. foreach($wylosowane as $obrazek) {
  14. echo '<a href="' . $_galleryPath . $obrazki[$obrazek] . '"><img src="image.php?filepath=' .$_galleryPath . $obrazki[$obrazek] . '" /></a>';
  15. }
  16. ?>
i image.php
  1. <?php
  2. function skaluj($filepath) {
  3. $iw = 223;
  4. $ih = 149;
  5. $img_src = imagecreatefromjpeg($filepath);
  6. $img_dst = imagecreatetruecolor($iw, $ih);
  7. $is = getimagesize($filepath);
  8. imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $iw, $ih, $is[0], $is[1]);
  9. header('content-type: image/jpeg');
  10. imagejpeg($img_dst, null, 100);
  11. }
  12. skaluj($_GET['filepath']);
Jednak nie zaleca się skalowania obrazów w locie (zauważ, że strona się będzie długo ładować), ponieważ zżera to mnóstwo zasobów. Lepiej przy wrzucaniu obrazków na serwer tworzyć miniaturki np. w podkatalogu thumbs/ (podczas wrzucania obrazki skalujemy) i korzystać z miniaturek.
Banzaj
Da się proces tworzenia miniatur przy wrzucaniu zautomatyzować ? Tak żeby np. wrzucane było oryginalne zdjęcie a jednocześnie tworzona miniaturka o przyciętej wysokości i proporcjonalnej szerokości ?
mortus
Da się, zapisuje się za pomocą imagejpeg($img_dst, null, 100); (lub odpowiedniej dla danego rozszerzenia, przy czym jako drugi parametr trzeba podać ścieżkę do pliku razem z jego nazwą. Odnośnie rozmiarów, to trzeba je policzyć i da się to zrobić. Zresztą poszukaj w Google pod hasłem "php skalowanie obrazów", na pewno znajdziesz.

Za samo uploadowanie pliku odpowiada funkcja, move_uploaded_files. Zatem algorytm jest prosty:
1. wrzucamy plik na serwer zapamiętujemy ścieżkę do pliku,
2. tworzymy miniaturę wykorzystując zapamiętaną ścieżkę i zapisujemy ją, albo w katalogu z miniaturkami i z tą samą nazwą, albo pod odpowiednio zmienioną nazwą.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.