Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Miniaturki zdjęć
Forum PHP.pl > Forum > PHP
Mazur_pl
Witam, jestem nowy na forum więc proszę nie za ostro na mnie smile.gif .

Stworzyłem prostą galerię zdjęć wygląda to tak:


Kiedy klikniemy na jakąś miniaturkę pokazuje nam się pełny obrazek.
Mam (niby) kod od tworzenia miniaturek ale mam pytanie.
Jak zrobić aby te miniatury były w kwadracikach 100x100 o jakimś tam kolorze i równo po układane jak tutaj:

http://galeria.interia.pl/katalog,t_id,5,s_id,0

Wszystko jest równe , a u mnie bałagan smile.gif .
Proszę o pomoc :] .
starach
Biblioteka GD http://pl2.php.net/manual/pl/ref.image.php
orazdwie pętle for() do wygenerowania takiej układanki (żeby było równo;))
Mazur_pl
Dzięki , a wiesz może jak to uruchomić bo Ja z angielskim kiepsko ;d ;p.
starach
Jak uruchomić co ?
Bibliotekę gd ?
Wchodzisz do php.ini i usuwasz średnik ';' przed linią bodajże extension=php_gd2.dll i tyle.
misiek172
@orglee ale jeśli on ma skrypt który mu tworzy miniaturki to i ma zainstalowaną bibliotekę GD2 smile.gif, ponieważ bez niej nie działają takie polecenia jak imagecreatefromjpg(); czyli nie można skryptowo tworzyć miniaturek smile.gif.
Mazur_pl
No więc (zgłupiałem) chyba mam o to cały kod tej mojej galerii:
gallery.php :
  1. <?php
  2.  
  3. //Odczyt katalogu gdzie znajduja się zdjecia
  4. $katalog = opendir('./gallery/images/');
  5. $i = 1;
  6.  
  7. while($plik = readdir ($katalog)) {
  8. if (ereg (".gif$|.jpg$", $plik)) {
  9. $zdjecia[$i++] = $plik;
  10. }
  11. }
  12. closedir ($katalog);
  13.  
  14. //////////////////////////////////////////////////////////
  15. if(($_GET['nr']>0) && ($_GET['nr']<=count($zdjecia))) {
  16.  
  17. /////Linki//
  18. if(($_GET['nr']>1) && ($_GET['nr']<count($zdjecia))) {
  19. echo "<table border="0" width="100%"><tr><td width="30%">";
  20. echo "<a href="./index.php?id=gallery&nr=".($_GET['nr']-1).""><img src="./gallery/go.gif" border=0></a>";
  21. echo "</td><td width="30%">";
  22. echo "<a href="./index.php?id=gallery">Galeria</a>";
  23. echo "</td>";
  24. echo "<td width="30%">";
  25. echo " <a href="./index.php?id=gallery&nr=".($_GET['nr']+1).""><img src="./gallery/back.gif" border=0></a>";
  26. echo "</td></tr></table>";
  27. } elseif($_GET['nr']>1) {
  28. echo "<table border="0" width="100%"><tr><td width="30%">";
  29. echo "<a href="./index.php?id=gallery&nr=".($_GET['nr']-1).""><img src="./gallery/go.gif" border=0></a> ";
  30. echo "</td><td width="30%">";
  31. echo "<a href="./index.php?id=gallery">Galeria</a>";
  32. echo "</td><td width="30%">&nbsp;</td></tr></table>";
  33. } else {
  34. echo "<table border="0" width="100%"><tr><td width="30%">&nbsp;</td><td width="30%">";
  35. echo "<a href="./index.php?id=gallery">Galeria</a>";
  36. echo "</td><td width="30%">";
  37. echo " <a href="./index.php?id=gallery&nr=".($_GET['nr']+1).""><img src="./gallery/back.gif" border=0></a>";
  38. echo "</td></tr></table>";
  39. }
  40. ////////////
  41.  
  42. $nazwapliku = "./gallery/images/".$zdjecia[$_GET['nr']];
  43.  
  44. if(file_exists($nazwapliku)) {
  45. //Jezeli istnieje plik
  46. $rozmiar = getimagesize($nazwapliku);
  47. //Wyswietl Duze zdjecie
  48. echo "<center><a href="./$nazwapliku" rel="lightbox"><img src="".$nazwapliku.""".$rozmiar[3]." border=0></a></center>";
  49. }
  50. //////////////////////////////////////////////////////////
  51. } elseif(count($zdjecia)>0) { //Jezeli jest przynajmniej jedno zdjecie
  52. if($_GET['page'] == "") {
  53. $counter=0;
  54. for ($i=1; $i<=count($zdjecia); $i++) {
  55. ///////////////////////////////////
  56. $nazwapliku = "./gallery/images/".$zdjecia[$i];
  57. $rozmiar = getimagesize($nazwapliku);
  58. ///////////////////////////////////
  59. ////////////////
  60. echo "<a href="./index.php?id=gallery&nr=$i">";
  61. echo "<img src="./image.php?img=".urlencode("./".$nazwapliku)."" alt="Some image" border="1"/>&nbsp;&nbsp;";
  62. echo "</a>";
  63. ////////////////
  64. $Counter++;
  65. if($Counter == 5) {
  66. echo('<br />');
  67. $Counter=0;
  68. }
  69. }
  70. } else {
  71. echo"Page2";
  72. }
  73. } else {
  74. echo "Katalog jest pusty.";
  75. }
  76. ?>


Oraz:
image.php:
  1. <?php
  2.  
  3. function ResizeImages($Picture, $NewWidth, $NewHeight){
  4. if(preg_match('/(.jpg|.jpeg)/i', $Picture))
  5. $Extensions='jpg';
  6. elseif(preg_match('/.png/i', $Picture))
  7. $Extensions='png';
  8. elseif(preg_match('/.gif/i', $Picture))
  9. $Extensions='gif';
  10.  
  11. switch($Extensions){
  12. case 'jpg': header('Content-type: image/jpeg'); break;
  13. case 'png': header('Content-type: image/png'); break;
  14. case 'gif': header('Content-type: image/gif'); break;
  15. }
  16.  
  17. list($Width, $Height)=getimagesize($Picture);
  18.  
  19. if($Width>$Height && $NewHeight<$Height)
  20. $NewHeight=$Height/($Width/$NewWidth);
  21. elseif($Width<$Height && $NewWidth<$Width)
  22. $NewWidth=$Width/($Height/$NewHeight);
  23. else{
  24. $NewWidth=$Width;
  25. $NewHeight=$Height;
  26. }
  27.  
  28. switch($Extensions){
  29. case 'jpg': $Source=imagecreatefromjpeg($Picture); break;
  30. case 'png': $Source=imagecreatefrompng($Picture); break;
  31. case 'gif': $Source=imagecreatefromgif($Picture); break;
  32. }
  33.  
  34. $Thumb=imagecreatetruecolor($NewWidth, $NewHeight);
  35.  
  36. imagecopyresized($Thumb, $Source, 0, 0, 0, 0, $NewWidth, $NewHeight, $Width, $Height);
  37.  
  38. switch($Extensions){
  39. case 'jpg': return imagejpeg($Thumb); break;
  40. case 'png': return imagepng($Thumb); break;
  41. case 'gif': return imagegif($Thumb); break;
  42. }
  43. }
  44.  
  45. $Image=ResizeImages(urldecode($_GET['img']), 100, 100);
  46.  
  47. echo $Image;
  48.  
  49. ?>


Ale teraz jak zrobić aby miniaturki były równe?
cinekz
@Mazur_pl: Skorzystaj z jakiejś gotowej biblioteki, np. ImageConversion z eZ Components. Proponuje też poszukać na phpclasses.org.
Pozdrawiam.
jaskooo
Witam,

A nie wystarczy po prostu ustawić taka sama wysokość <TD> i ustawić zdjęcia u góry każdego z tychże <TD>?

Moim zdaniem powinno pomóc.

Pozdrawiam
----------------
jaskooo
nowy w PHP smile.gif
misiek172
@jaskooo pewnie ze wystarczy ;P tylko jeszcze musi odpowiednio zdjęcia zminiaturyzować żeby mu nie rościągały komórki.
Darti
Wszystko fajnie, tylko że @Mazur_pl nie używa w tym momencie tabelek do poukładania tych zdjęć a miniaturki ma już w tym momencie (nie trzeba już ich tworzyć) ...
  1. <?php
  2. } elseif(count($zdjecia)>0) { //Jezeli jest przynajmniej jedno zdjecie
  3. if($_GET['page'] == "") {
  4. $counter=0;
  5. echo "<table border="0">";
  6. echo "<tr>";
  7. for ($i=1; $i<=count($zdjecia); $i++) {
  8. ///////////////////////////////////
  9. $nazwapliku = "./gallery/images/".$zdjecia[$i];
  10. $rozmiar = getimagesize($nazwapliku);
  11. ///////////////////////////////////
  12. ////////////////
  13. echo "<td align="center" valign="middle">";
  14. echo "<a href="./index.php?id=gallery&nr=$i">";
  15. echo "<img src="./image.php?img=".urlencode("./".$nazwapliku)."" alt="Some image" border="1"/>";
  16. echo "</a>";
  17. echo "</td>";
  18. ////////////////
  19. $Counter++;
  20. if($Counter == 5) {
  21. echo('</tr><tr>');
  22. $Counter=0;
  23. }
  24. }
  25. echo "</tr>";
  26. echo "</table>";
  27. } else {
  28. echo"Page2";
  29. }
  30. } else {
  31. echo "Katalog jest pusty.";
  32. }
  33. ?>
Mazur_pl
Huh, dziękuje smile.gif nie wiedziałem że tak prosto można rozwiązać :] .
blackneron
Ja mam z kolei odwrotny problem jak miał Mazur_pl. Na mojej galerii chciałbym wyświetlić miniatirki o określonej szerokości ale nie wyrównane.
Napisałem taką funkcje co tworzy zdjęcie z wypełnieniem białym. A chciałbym teraz ją zmienić tak aby miniaturka była bez tego wypełnienia, tylko miała określony rozmiar np. 100px a wysokość zgodnie z proporcją.

  1. FUNCTION tworz_mianiatura($nazwa,$wiersz,$id,$katid)
  2. {
  3. IF(file_exists("galeria/$wiersz[nazwa_kat_pl]/small-$nazwa")) RETURN;
  4. $img1 = imagecreatefromjpeg("galeria/$wiersz[nazwa_kat_pl]/$nazwa");
  5. $img2 = imagecreatetruecolor(100,100);
  6. $white = imagecolorallocate($img2, 255, 255, 255);
  7. imagefill($img2, 0, 0, $white);
  8. $skalax=100/imagesx($img1);
  9. $skalay=100/imagesy($img1);
  10. $skala=$skalax<$skalay ? $skalax : $skalay;
  11. $sx=round($skala*imagesx($img1));
  12. $sy=round($skala*imagesy($img1));
  13. imagesx($img1), imagesy($img1));
  14. imagecopyresampled($img2, $img1, round((100-$sx)/2), round((100-$sy)/2), 0, 0, $sx, $sy, imagesx($img1), imagesy($img1));
  15. imagejpeg($img2,"galeria/$wiersz[nazwa_kat_pl]/small-$nazwa");
  16. imagedestroy($img2);
  17. imagedestroy($img1);
  18. }
Mazur_pl
Użyj mojego kodu. Ustalał szerokość a wysokość nie była taka sama.
Darti
  1. <?php
  2. function tworz_mianiatura($nazwa,$wiersz,$id,$katid)
  3. {
  4. if(file_exists("galeria/$wiersz[nazwa_kat_pl]/small-$nazwa")) return;
  5. $img1 = imagecreatefromjpeg("galeria/$wiersz[nazwa_kat_pl]/$nazwa");
  6.  
  7. $white = imagecolorallocate($img2, 255, 255, 255);
  8. imagefill($img2, 0, 0, $white);
  9. $skalax=100/imagesx($img1);
  10. $skalay=100/imagesy($img1);
  11. $skala=$skalax<$skalay ? $skalax : $skalay;
  12. $sx=round($skala*imagesx($img1));
  13. $sy=round($skala*imagesy($img1));
  14. $img2 = imagecreatetruecolor($sx,$sy); //zamiast podawac stale 100 x 100 używam zmiennych z obliczonymi wartosciami
  15. imagecopyresampled($img2, $img1, round((100-$sx)/2), round((100-$sy)/2), 0, 0, $sx, $sy, imagesx($img1), imagesy($img1));
  16. imagejpeg($img2,"galeria/$wiersz[nazwa_kat_pl]/small-$nazwa");
  17. imagedestroy($img2);
  18. imagedestroy($img1);
  19. }
  20. ?>
blackneron
W linii 15 wyskakuje mi błąd. Po jej usunięciu robi miniaturkę ale z "połową wypełnienia".
Biblioteka gd jest uruchomiona.
Darti
  1. <?php
  2. function tworz_mianiatura($nazwa,$wiersz,$id,$katid)
  3. {
  4. if(file_exists("galeria/$wiersz[nazwa_kat_pl]/small-$nazwa")) return;
  5. $img1 = imagecreatefromjpeg("galeria/$wiersz[nazwa_kat_pl]/$nazwa");
  6. $white = imagecolorallocate($img2, 255, 255, 255);
  7. $skalax=100/imagesx($img1);
  8. $skalay=100/imagesy($img1);
  9. $skala=$skalax<$skalay ? $skalax : $skalay;
  10. $sx=round($skala*imagesx($img1));
  11. $sy=round($skala*imagesy($img1));
  12. $img2 = imagecreatetruecolor($sx,$sy);
  13. imagefill($img2, 0, 0, $white);
  14. imagecopyresampled($img2, $img1, round((100-$sx)/2), round((100-$sy)/2), 0, 0, $sx, $sy, imagesx($img1), imagesy($img1));
  15. imagejpeg($img2,"galeria/$wiersz[nazwa_kat_pl]/small-$nazwa");
  16. imagedestroy($img2);
  17. imagedestroy($img1);
  18. }
  19. ?>
blackneron
przy "wertykalnej" obrazkach miniatura jest tworzona prawidłowo (bez wypełnienia) ale przy "horyzontalnej" tworzy się pasek wypełnienia.
Darti
Teraz już gra (i śpiewa) smile.gif

  1. <?php
  2. function tworz_mianiatura($nazwa,$wiersz,$id,$katid)
  3. {
  4. if(file_exists("galeria/$wiersz[nazwa_kat_pl]/small-$nazwa")) return;
  5. $img1 = imagecreatefromjpeg("galeria/$wiersz[nazwa_kat_pl]/$nazwa");
  6. $skalax=100/imagesx($img1);
  7. $skalay=100/imagesy($img1);
  8. $skala=$skalax<$skalay ? $skalax : $skalay;
  9. $sx=round($skala*imagesx($img1));
  10. $sy=round($skala*imagesy($img1));
  11. $img2 = imagecreatetruecolor($sx,$sy);
  12. $white = imagecolorallocate($img2, 255, 255, 255);
  13. imagefill($img2, 0, 0, $white);
  14. imagecopyresampled($img2, $img1, 0, 0, 0, 0, $sx, $sy, imagesx($img1), imagesy($img1));
  15. imagejpeg($img2,"galeria/$wiersz[nazwa_kat_pl]/small-$nazwa");
  16. imagedestroy($img2);
  17. imagedestroy($img1);
  18. }
  19. ?>
blackneron
Darti dzieki, jest teraz jak powinno być.
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.