Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Miniaturka JPEG/GIF/PNG
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Stron: 1, 2
tiraeth
  1. <?php
  2. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  3. {
  4.  /*
  5. * source - obrazek jpeg
  6. * max_x - maksymalna szerokosc pomniejszonego obrazka
  7. * max_y - maksymalna dlugosc pomniejszonego obrazka
  8. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  9. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  10. */
  11.  
  12. if(exif_imagetype($source) == IMAGETYPE_JPEG)
  13. {
  14.  $img_src = imagecreatefromjpeg($source);
  15. }
  16. elseif(exif_imagetype($source) == IMAGETYPE_GIF)
  17. {
  18.  $img_src = imagecreatefromgif($source);
  19. }
  20. elseif(exif_imagetype($source) == IMAGETYPE_PNG)
  21. {
  22.  $img_src = imagecreatefrompng($source);
  23. }
  24. else
  25. {
  26.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  27. }
  28.  
  29.  $image_x = imagesx($img_src);
  30.  $image_y = imagesy($img_src);
  31.  if($image_x > $image_y) // Landscape
  32.  {
  33. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  34. $ratio_y = $ratio_x;
  35. $move = 'y';
  36.  }
  37.  else // Portrait
  38.  {
  39. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  40. $ratio_x = $ratio_y;
  41. $move = 'x';
  42.  }
  43. $new_x = $image_x*$ratio_x;
  44. $new_y = $image_y*$ratio_y;
  45.  
  46. $move_x = ($move == &#092;"x\") ? ($max_x-$new_x)/2 : 0;
  47. $move_y = ($move == &#092;"y\") ? ($max_y-$new_y)/2 : 0;
  48.  
  49. $new_img = imagecreatetruecolor($max_x, $max_y);
  50. $background = imagecolorallocate($new_img, 255, 255, 255);
  51. imagefill($new_img, 0, 0, $background);
  52. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  53.  
  54. if(exif_imagetype($save_image) == IMAGETYPE_JPEG)
  55. {
  56.  imagejpeg($new_img, $save_image, $jpeg_quality);
  57. }
  58. elseif(exif_imagetype($save_image) == IMAGETYPE_GIF)
  59. {
  60.  imagegif($new_img, $save_image);
  61. }
  62. elseif(exif_imagetype($save_image) == IMAGETYPE_PNG)
  63. {
  64.  imagepng($new_img, $save_image);
  65. }
  66.  
  67.  echo '<img src=\"'.$save_image.'\" border=\"1\">';
  68. }
  69. ?>


użycie:
  1. <?
  2. resizeImage('obrazek_duzy.jpg', MAX_WYMIAR_X, MAX_WYMIAR_Y, 'obrazek_maly_nowy.jpg', JAKOSC_JPEG); // (5 parametr opcjonalnie dla jpg)
  3. ?>


Funkcja jest w stanie utworzyć miniaturkę z każdego obrazka jpg/jpeg, gif oraz png...
son
Sooper skrypt właśnie tego szukałem thumbsupsmileyanim.gif
Dzięki Tiraeth naprawdę bardzo mi pomogłeś exclamation.gif
Polecam wszystkim biggrin.gif biggrin.gif biggrin.gif
Toom
Jak to się ma do obsługi GIFów w GD2, bo słyszałem, że tam jej nie ma?
Czy ktoś testował funkcję pod tym kontem?
tiraeth
GD2 obsługuję GIFy.... testowałem pod kątem gifów na GD2/PHP5/APACHE2 i działało..
Kocurro
Celeme wyjaśnienia.

GD nie posiadało obsługi GIF'ów ze względów prawa patentowego. Jednakze prawo patentu zakończyło się w listopadzie zeszłego roku. I teraz w GD jest obsługa GIF'a, a nawet animowanego GIF'a. Niestety port na php nie posiada jeszcze wszystkich funkcji zaimplementowanych w standardzie - ale możliwe, że szybko dodadzą.

W każdym bądź razie w GD najnowszym jest pełna obsługa GIF'ów, z wyjatkiem animacji, która chwilowo nie jest dostępna pod php - ale już pracuje nad własną klasą do obsługi animacji, która poszerzy możliwości GD
Toom
Dowiedziałem się nawet że w 1.6 Zakończono obsługę GIF, żeby przywrócić w 2.0.28

Problem w tym, że na localhoscie (win - easyPHP1.7) mam wersję 2.0.18. Więc pytanie: Jak zainstalować nowszą? najprostsze metody mile widziane smile.gif
---------
Tymczasowo zrobiłem tak: wrzuciłem do katalogu php nową wersję php 4.3.10 z php.net.
Tylko czemu wyświetla, w gd_info:
Kod
{ ["GD Version"]=> string(27) "bundled (2.0.15 compatible)" ["FreeType Support"]=> bool(true) ["FreeType Linkage"]=> string(13) "with freetype" ["T1Lib Support"]=> bool(false) ["GIF Read Support"]=> bool(true) ["GIF Create Support"]=> bool(false) ["JPG Support"]=> bool(true) ["PNG Support"]=> bool(true) ["WBMP Support"]=> bool(true) ["XBM Support"]=> bool(true) ["JIS-mapped Japanese Font Support"]=> bool(false) }  
Wynika z tego, że nie ma tu GIF Create Support
czy on tak zawsze?
Kocurro
php jest strasznie w plecy jeśli chodzi o GD :/

musisz zainstalować sobie patcha udostępniajacego GIFy.

a zanim php obsługży w pełni i prawidłowo najnowsze GD to jeszcze poczekamy...a tak chciałbym juz teraz animowane gify robić...ehh...
Toom
Dzięki za info smile.gif

Możesz rozwinąć kwestię patcha (skąd i jak?), bo jestem mało wprawiony w instalacjach php z apachem :/

Poza tym, znajomy Admin pisał mi, że na jego serwerze linux jest wersja 2.0.31, w planie 33, wraz z php 4.3.10, ale jeszcze testuje.
Więc chyba się da winksmiley.jpg

Jeśli chodzi o gify, nie zależy mi na animacjach jedynie, żeby można było robić miniaturki gifów.
pys1986
A mi to niedziala nic sie niewyswietla i nietworzy sie zaden plik O CO CHODZI questionmark.gif?
tiraeth
A może napiszesz co dokładnie nie działa?
pys1986
po prostu nic sie niewyswitla ani nie tworzy mi zadnego pliku, wywoluje funkcje w ten sposob i nic

  1. <?php
  2. resizeImage('1.jpg', 100, 100, '2.jpg', 5); 
  3. ?>


Oczywiscie wczesniej pisze cala funkcje exclamation.gif!
miedzna
mi wywala :

Fatal error: Call to undefined function: exif_imagetype()

co robić?
kicaj
Cytat(miedzna @ 2005-03-04 13:39:22)
Fatal error: Call to undefined function: exif_imagetype()

--enable--exif
tiraeth
NOWY KOD KTÓRY NIE WYMAGA EXIF:

  1. <?php
  2. function imgType($name)
  3. {
  4.  if(substr($name, -4, 4) == '.jpg' || substr($name, -4, 4) == 'jpeg')
  5.  {
  6. return &#092;"IMAGETYPE_JPEG\";
  7.  }
  8.  elseif(substr($name, -4, 4) == '.gif')
  9.  {
  10. return &#092;"IMAGETYPE_GIF\";
  11.  }
  12.  elseif(substr($name, -4, 4) == '.png')
  13.  {
  14. return &#092;"IMAGETYPE_PNG\";
  15.  }
  16. }
  17.  
  18. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  19. {
  20.  /*
  21. * source - obrazek jpeg
  22. * max_x - maksymalna szerokosc pomniejszonego obrazka
  23. * max_y - maksymalna dlugosc pomniejszonego obrazka
  24. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  25. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  26. */
  27.  
  28. if(imgType($source) == &#092;"IMAGETYPE_JPEG\")
  29. {
  30.  $img_src = imagecreatefromjpeg($source);
  31. }
  32. elseif(imgType($source) == &#092;"IMAGETYPE_GIF\")
  33. {
  34.  $img_src = imagecreatefromgif($source);
  35. }
  36. elseif(imgType($source) == &#092;"IMAGETYPE_PNG\")
  37. {
  38.  $img_src = imagecreatefrompng($source);
  39. }
  40. else
  41. {
  42.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  43. }
  44.  
  45.  $image_x = imagesx($img_src);
  46.  $image_y = imagesy($img_src);
  47.  if($image_x > $image_y) // Landscape
  48.  {
  49. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  50. $ratio_y = $ratio_x;
  51. $move = 'y';
  52.  }
  53.  else // Portrait
  54.  {
  55. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  56. $ratio_x = $ratio_y;
  57. $move = 'x';
  58.  }
  59. $new_x = $image_x*$ratio_x;
  60. $new_y = $image_y*$ratio_y;
  61.  
  62. $move_x = ($move == &#092;"x\") ? ($max_x-$new_x)/2 : 0;
  63. $move_y = ($move == &#092;"y\") ? ($max_y-$new_y)/2 : 0;
  64.  
  65. $new_img = imagecreatetruecolor($max_x, $max_y);
  66. $background = imagecolorallocate($new_img, 255, 255, 255);
  67. imagefill($new_img, 0, 0, $background);
  68. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  69.  
  70. if(imgType($save_image) == &#092;"IMAGETYPE_JPEG\")
  71. {
  72.  imagejpeg($new_img, $save_image, 100);
  73. }
  74. elseif(imgType($save_image) == &#092;"IMAGETYPE_GIF\")
  75. {
  76.  imagegif($new_img, $save_image);
  77. }
  78. elseif(imgType($save_image) == &#092;"IMAGETYPE_PNG\")
  79. {
  80.  imagepng($new_img, $save_image);
  81. }
  82.  
  83.  echo '<img src=\"'.$save_image.'\" border=\"1\">';
  84. }
  85. ?>
darkspirit
no tak ale teraz w sumie można łatwo złapać błąd jak obrazek ma nazwę hello.jpg, a jest typu *.gif, nie można by naprzykład zastosować: getimagesize()?

paps
webtg
Skrypcik fajny, ale przy wielkich rozdzielczościach nie działa exclamation.gif
W czym może być problem ?
maker
max_execution_time lub memory_limit

potrzebna pamiec jak dobrze pamietam oblicza sie wzorem

((szerokosc x wysokosc x 3)/1024)/1024 dry.gif
webtg
To mam gdzies zadeklarować w skrypcie czy zmienić w php.ini ?
Bakus
Wszystko jest napisane tu:

max_execution_time - http://php.idn.net.pl/ini-set

memory_limit - http://php.idn.net.pl/set-time-limit
webtg
Dzięki dzięki,

poprostu nie mam wglądu w php.ini, ale admin wszystko pozmieniał i jest OK

Ale taki temat może się komuś przydać, o ile skorzysta z wyszukiwarki
xberus
  1. <?php
  2.  imagejpeg($new_img, $save_image, 100);
  3. ?>


Ta linijka nie powinna wygladac tak?

  1. <?php
  2. imagejpeg($new_img, $save_image, $jpeg_quality);
  3. ?>
tiraeth
Faktycznie smile.gif małe przeoczenie...
PanGuzol
Oco chodzi z
--enable--exif
bo niewiem kaj to dać?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
tiraeth
Należy skompilować php z obsługą funkcji exif_
PanGuzol
Można jaśniej bo dalej niekapuje?questionmark.gif
tiraeth
Może poczytaj php.net o rekompilacji/kompilacji smile.gif Sam się na tym nie znam tongue.gif

Cytat(php.net (english))
Windows users must enable both the php_mbstring.dll  and php_exif.dll DLL's in php.ini. The php_mbstring.dll DLL must be loaded before the php_exif.dll DLL so adjust your php.ini accordingly.

Cytat(php.net (tłumaczenie))
Użytkownicy Windows muszą włączyć obsługę bibliotek php_mbstring.dll i php_exif.dll w php.ini. Plik php_mbstring.dll musi zostać załadowany przed php_exif.dll, więc odpowiednio zedytuj swój plik konfiguracyjny.


Kod
[-- OTWÓRZ: php.ini --]

[-- ZNAJDŹ --]
;extension=php_exif.dll

[-- ZAMIEŃ NA --]
extension=php_mbstring.dll

[-- ZNAJDŹ --]
;extension=php_mbstring.dll

[-- ZAMIEŃ NA --]
extension=php_exif.dll

[-- ZAPISZ I ZAMKNIJ PLIK --]
bumfank
a powiedzcie mi jak zrobic inteligentny resize, czyli np mam ustawiona tylko wartosc zeby szerokosc miala 150px i on wtedy inteligetnie dlugosc ustali wedlug oryginalnego obrazka np obrazek to plakat gdzie dlugosc wieksza jak szerokosc to wtedy np bedzie szerokosc 150 i on sam sobie ustawi ze dlugosc to 300pxow i odwrotnie lezace obrazki zeby mialy szer 150 a dlugosc np 100pxow.

odrazu powiem ze uzylem drugiej wersji skryptu smile.gif
pozdrawiam smile.gif
Bojakki
Cytat(bumfank @ 2005-08-08 00:27:46)
a powiedzcie mi jak zrobic inteligentny resize, czyli np mam ustawiona tylko wartosc zeby szerokosc miala 150px i on wtedy inteligetnie dlugosc ustali wedlug oryginalnego obrazka np obrazek to plakat gdzie dlugosc wieksza jak szerokosc to wtedy np bedzie szerokosc 150 i on sam sobie ustawi ze dlugosc to 300pxow i odwrotnie lezace obrazki zeby mialy szer 150 a dlugosc np 100pxow.

odrazu powiem ze uzylem drugiej wersji skryptu smile.gif
pozdrawiam smile.gif

Sorka, ze odkopuje temat - dinozaur, ale mam dokladnie taka sama prosbe jak piszaca nade mna osoba. Moze ktos pomoc?
NuLL
Skorzystajcie z wyszukiwarki - sam wkleiłem taką funkcję.
Herf-Life
dobry skrypt ... ale
w $jpeg_quality najlepiej zastosować jakość 94 (nie więcej)
z doświadczenia wam to napisałem smile.gif
Droopy
tiraeth - świetna funkcja, wielkie dzięki, jednak mam kilka uwag smile.gif
po pierwsze jeśli nazwa pliku jest napisana dużymi literami (wraz z rozszerzeniem) to wtedy funkcja nie rozpoznaje typu pliku (i się wywala), po drugie $jpeg_quality naprawde 90 wystarczy, a używanie 100 prowadzi to powstawania plików sporo większych, a po trzecie dlacego stworzony obrazek ma te białe marginesy (znaczy jak dam do zmniejszenie odrazek bardzo wysoki a wąski to pojawią się białe marginesy po bokach)

trochę zmieniłem skrypt, tak jak napisałem powyżej i mam nadzieję, że nie obrazisz się jak wkleję tu twój skrypt z moimi modyfikacjami smile.gif

  1. <?php
  2. function imgType($name)
  3. {
  4. $roz = strtolower(substr($name,-4));
  5.  if($roz == '.jpg' || $roz == 'jpeg' || $roz == '.jpe')
  6.  {
  7. return "IMAGETYPE_JPEG";
  8.  }
  9.  elseif($roz == '.gif')
  10.  {
  11. return "IMAGETYPE_GIF";
  12.  }
  13.  elseif($roz == '.png')
  14.  {
  15. return "IMAGETYPE_PNG";
  16.  }
  17. }
  18.  
  19. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 90)
  20. {
  21.  /*
  22. * source - obrazek jpeg
  23. * max_x - maksymalna szerokosc pomniejszonego obrazka
  24. * max_y - maksymalna dlugosc pomniejszonego obrazka
  25. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  26. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  27. */
  28.  
  29. if (imgType($source) == "IMAGETYPE_JPEG"){
  30. $img_src = imagecreatefromjpeg($source);
  31. } else if (imgType($source) == "IMAGETYPE_GIF"){
  32. $img_src = imagecreatefromgif($source);
  33. } else if (imgType($source) == "IMAGETYPE_PNG"){
  34. $img_src = imagecreatefrompng($source);
  35. } else {
  36. die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  37. }
  38.  
  39. $image_x = imagesx($img_src);
  40. $image_y = imagesy($img_src);
  41. if($image_x > $image_y) { // Landscape
  42. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  43. $ratio_y = $ratio_x;
  44. $move = 'y';
  45. } else { // Portrait
  46. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  47. $ratio_x = $ratio_y;
  48. $move = 'x';
  49. }
  50. $new_x = $image_x*$ratio_x;
  51. $new_y = $image_y*$ratio_y;
  52.  
  53. $new_img = imagecreatetruecolor($new_x, $new_y);
  54. imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $image_x, $image_y);
  55.  
  56. if(imgType($save_image) == "IMAGETYPE_JPEG") {
  57. imagejpeg($new_img, $save_image, $jpeg_quality);
  58. } else if (imgType($save_image) == "IMAGETYPE_GIF") {
  59. imagegif($new_img, $save_image);
  60. } else if (imgType($save_image) == "IMAGETYPE_PNG") {
  61. imagepng($new_img, $save_image);
  62. }
  63.  
  64. echo '<img src="'.$save_image.'" border="1">';
  65. }
  66. ?>
Homiczek
Sorka że odgrzewam temat, ale mam problem związany z generacją miniaturki.
Skrypt taki już jakiś czas temu sobie zrobiłem, ale odkryłem jedną ciekawą rzecz.

Wcześniej też się zdarzało, że na stronie znajdowałem miniaturki wypełnione całe na czarno.
Ale teraz podczas prac nad nową wersją strony, do uploadu postanowiłem wrzucić zdjęcia z komórki (nokia 3220), noi pięknie mi wrzuciło wszystkie miniaturki czarne, a przy okazji troche błędów.

Odpaliłem nawet powyższy skrypt noi to samo - a nawet gorzej, bo on już nic nie wygenerował smile.gifsmile.gifsmile.gif

A sypie takimi błędami :
Kod
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'zdjecie.jpg' is not a valid JPEG file in c:\usr\krasnal\www\newstr\zdj_test.php on line 30

Warning: imagesx(): supplied argument is not a valid Image resource in c:\usr\krasnal\www\newstr\zdj_test.php on line 39

Warning: imagesy(): supplied argument is not a valid Image resource in c:\usr\krasnal\www\newstr\zdj_test.php on line 40


Czyli jakiś niezgodny format jpga - chociaż windoza go normalnie wyświetla i wsio jest ok. A to niby zostało coś sprawdzone podczas uploadu - czy plik jest typu pjeg lub jpeg(to w moim kodzie)

Jak ktoś ma jakieś pomysły czemu jpgi z koma nie są ok dla tej grupy funkcji, lub jak temu zaradzić to z góry dzienki smile.gif
mike
Prawdopodobie format zapisu tych zdjęć, pomimo że zbliżony do .jpg nie do końca nim jest. Może coś nie tak z typem mime. Założe się że jak je otworzysz w jakimś programie graficznym i zapiszesz ponownie jako .jpg to będzie działało.
Fallout
Witam,

po mękach z włączeniem GD2 smile.gif udało mi się uruchomić ten skrypt, naprawdę dobra robota.. ale jedna rzecz jest mi w nim potrzebna smile.gif tzn:

teraz plik jest nadpisywany, a chciałbym aby zapisywał się w tym samym katalogu co plik źródłowy + katalog mini. czyli

plik : /obrazki/1.jpg
mini : /obrazki/mini/1.jpg

czy byłby ktoś chętny wprowadzić taką modyfikacje?

edit:

no i ewentualnie aby sprawdzal czy plik mini istnieje to wtedy skrypt niepotrzebnie by sie nie wykonywal.. smile.gif

pozdrawiam
Bakus
  1. <?php
  2. define(MAX_WYMIAR_X, 128);
  3. define(MAX_WYMIAR_Y, 128);
  4. $dir = './obrazki/';
  5. $dir_mini = './obrazki/mini/';
  6.  
  7. if ($dh = opendir($dir))
  8. {
  9. while (($file = readdir($dh)) !== false)
  10. {
  11. if(substr($file, -3) == 'jpg' && !file_exists($dir_mini . $file))
  12. {
  13. resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file);
  14. }
  15. }
  16. closedir($dh);
  17. }
  18. ?>
Fallout
dzięki Bakus! Nawet nie przypuszczałem, że to takie balane smile.gif

No i nigdy nie może być za pięknie winksmiley.jpg

Cytat
./galerie/spacery/.
./galerie/spacery/mini/.
./galerie/spacery/..
./galerie/spacery/mini/..
./galerie/spacery/mini
./galerie/spacery/mini/mini
./galerie/spacery/1.JPG
./galerie/spacery/mini/1.JPG
./galerie/spacery/10.jpg
./galerie/spacery/mini/10.jpg
./galerie/spacery/12.JPG
./galerie/spacery/mini/12.JPG
./galerie/spacery/13.JPG
./galerie/spacery/mini/13.JPG


oczywiscie chodzi o pierwsze 6 wpisów.. jak się ich pozbyć?questionmark.gif?

moje kody:


Ten wyswietla galerie, a po kliknieciu w nia, wyswietla minaturki:
  1. <?php
  2. ini_set('display_errors',1);
  3. include 'db_engine.php';
  4. include 'resize.inc.php';
  5.  
  6. define(MAX_WYMIAR_X, 100);
  7. define(MAX_WYMIAR_Y, 75);
  8.  
  9. $db = new dbengine();
  10. $db->polacz();
  11.  
  12. if (isset($_GET['id'])) // pokazuje wybrana
  13. {
  14. $gid = $_GET['id'];
  15. // pobranie katalogu fotek
  16. $db->DoSql("SELECT katalog FROM galerie WHERE id_galerii = $gid");
  17. $kat = mysql_result($db->wynik,0,0);
  18. $dir = './galerie/'.$kat.'/';
  19. $dir_mini = './galerie/'.$kat.'/mini/';
  20. if ($dh = opendir($dir))
  21. {
  22. while (($file = readdir($dh)) !== false)
  23. {
  24. echo $dir. $file. '<br>';
  25. echo $dir_mini. $file. '<br>';
  26. /*
  27. if(((substr($file, -3,3) == 'jpg') or (substr($file, -3,3) == 'JPG'))
  28.  && !file_exists($dir_mini . $file))
  29. {
  30. resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file);
  31. }
  32. elseif(file_exists($dir_mini . $file))
  33. {
  34. echo '<img src="'.$dir_mini . $file.'" border="1">';
  35. }*/
  36. }
  37. closedir($dh);
  38. } 
  39.  
  40. $db->rozlacz();
  41. }
  42. else // pokazuje wszystkie
  43. {
  44.  
  45. $db->DoSQL("SELECT * FROM galerie");
  46. $db->NRows;
  47. $w = $db->wynik;
  48. $n = $db->rows;
  49.  
  50. while ($r=mysql_fetch_array($w))
  51. {
  52. $id  = $r['id_galerii'];
  53. $opis = $r['nazwa_galerii'];
  54.  
  55. echo "<a href="index.php?s=galerie&amp;id=$id">".$opis.'</a><br>';
  56. }
  57.  
  58. $db->rozlacz();
  59.  
  60. } // koniec wszystkich
  61. ?>


Ten kod to natomiast ciut zmodyfikowany skrypt z tematu (wiec nie wklejam calego):

  1. <?php
  2. function imgType($name)
  3. {
  4.  if((substr($name, -4, 4) == '.JPG')OR(substr($name, -4, 4) == '.jpg'))
  5.  {
  6. return "IMAGETYPE_JPEG";
  7.  }
  8.  elseif(substr($name, -4, 4) == '.gif')
  9.  {
  10. return "IMAGETYPE_GIF";
  11.  }
  12.  elseif(substr($name, -4, 4) == '.png')
  13.  {
  14. return "IMAGETYPE_PNG";
  15.  }
  16. }
  17. ?>


jak widac zmienilem tylko warunek..


Wiec powtorze pytanie? jak pozbyc sie tych zbędnych wpisów?

Dziękuje z góry i pozdrawiam
Marcin
Bakus
  1. <?php
  2. if(((substr($file, -3,3) == 'jpg') or (substr($file, -3,3) == 'JPG'))
  3. ?>

to właśnie powyższa linijka odpowiada za wybieranie tylko plikow .jpg
mozesz zrobic tak:
  1. <?php
  2. $typy = array("jpg", "png", "gif");
  3. if(in_array(substr(strtolower($file), -3,3), $typy))
  4. {
  5. if(file_exists($dir_mini . $file))
  6. {
  7. print '<img src="'.$dir_mini . $file.'" border="1">';
  8. }else{
  9. resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file);
  10. }
  11. }
  12. ?>
Fallout
Dzięki ponownie Bakus !


Skrypt uruchomiony, działą znakomicie guitar.gif


Tylko tak zastanawiam się, czy jest sposób na "następny" i "poprzedni" ? W końcu to pliki, mogące mieć różne nazwy, może być ich rożna ilość.. jest możliwe wogóle to do wykonania?


pozdrawiam
Markym
Witam podepnę się pod topic. Interesuje mnie autogenerowanie miniatur zdjęć, skrypt poniżej niestety nie działa.

  1.  
  2. <?php
  3.  
  4.  
  5. define('DIR' , 'auto'); //gdzie są zdjęcia
  6. define('SUBDIR', 'auto/mini'); //podkatalog na miniatury
  7. define('PREFIX', 'm');
  8. define('WIDTH', 160);
  9. define('HEIGHT', 120);
  10.  
  11. $i = 0;
  12. mkdir(DIR . SUBDIR);
  13. chmod(DIR . SUBDIR, 0755);
  14.  
  15. if ($handle = opendir(DIR)) {
  16. while (false !== ($file = readdir($handle))) {
  17. if ($file != '.' && $file != '..' &&
  18. $file != basename(__FILE__) && $file != SUBDIR) {
  19. $i++;
  20. $src_img = imagecreatefromjpeg(DIR . $file);
  21. $dst_img = imagecreatetruecolor(WIDTH, HEIGHT);
  22. imagecopyresized($dst_img, $src_img, 0, 0, 0, 0,
  23. WIDTH, HEIGHT, imagesx($src_img),
  24. imagesy($src_img));
  25. $mini = PREFIX . $file;
  26. echo $i . '. Miniatura z pliku ' . $file . '...';
  27. echo imagejpeg($dst_img, DIR.SUBDIR.'/'.$mini,
  28. 100) && src_img ? 'OK' : 'FALSE';
  29. chmod(DIR.SUBDIR.'/'. $mini, 0755);
  30. echo "\n";
  31. }
  32. }
  33. }
  34.  
  35. ?>


Byłbym również wdzięczny za wskazanie jakiegoś funkcjonalnego skryptu do generowania miniatur w trakcie wysyłania na serwer. Ten powyżej miałby mnie trochę wyręczyć bo do zmodyfikowania jest sporo fotek.
intol
Jak wynika z moich testów w funkcji jest błąd, dotyczący obliczania ratio.

O ile dla obrazka o rozmiarach 100x100 wywołanie funkcji:

resizeImage($img,20, 100, $imgMini);

zadziała prawidłowo, to:

resizeImage($img,100, 20, $imgMini);

już tak nie zadziała.

P.S. (do autora)
Czy mógłbyś w główym poście umieścić ostateczną wersję skryptu? W wątku co rusz przedstawiane są jakieś udoskonalenia, i zaorientowanie się we wszystkich jest bardzo czasochłonne.
JOHNY
Witam wszystkich sorka że tak wtrące ale czy nie lepiej by było tworzyć miniaturke w tym samym katalogu z dopiskiem:
ex.
katalog/test.jpg
katalog/test_m.jpg
tiraeth
A od czego jest parametr $save_image ? Przecież podajesz tam nazwę pliku, do którego ma zostać zapisana miniaturka smile.gif

Niedługo może poprawię tą funkcję, narazie brak czasu sad.gif
MalyKazio
Witam,

Mam problem z tym skryptem. Jest to skrypt z pierwszego postu zmodyfikowany poprzez dodanie osobnego katalogu na miniaturki. I wlasnie w tym problem. Jesli katalog $dir i $dir_mini są jednakowe i wskazuja na docelowe miejsce uploadu duzego pliku to miniatura jest tworzona. Problem tylko w tym, ze jest tworzona w miejsce duzego pliku. Calosc wyglada tak:

  1. <?php
  2. $dir = './obrazki/';
  3.  $dir_mini = './mini/';
  4. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  5. {
  6.  
  7.  /*
  8. * source - obrazek jpeg
  9. * max_x - maksymalna szerokosc pomniejszonego obrazka
  10. * max_y - maksymalna dlugosc pomniejszonego obrazka
  11. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  12. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  13. */
  14.  
  15. if(exif_imagetype($source) == IMAGETYPE_JPEG)
  16. {
  17.  $img_src = imagecreatefromjpeg($source);
  18. }
  19. elseif(exif_imagetype($source) == IMAGETYPE_GIF)
  20. {
  21.  $img_src = imagecreatefromgif($source);
  22. }
  23. elseif(exif_imagetype($source) == IMAGETYPE_PNG)
  24. {
  25.  $img_src = imagecreatefrompng($source);
  26. }
  27. else
  28. {
  29.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  30. }
  31.  
  32.  $image_x = imagesx($img_src);
  33.  $image_y = imagesy($img_src);
  34.  if($image_x > $image_y) // Landscape
  35.  {
  36. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  37. $ratio_y = $ratio_x;
  38. $move = 'y';
  39.  }
  40.  else // Portrait
  41.  {
  42. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  43. $ratio_x = $ratio_y;
  44. $move = 'x';
  45.  }
  46. $new_x = $image_x*$ratio_x;
  47. $new_y = $image_y*$ratio_y;
  48.  
  49. $move_x = ($move == "x") ? ($max_x-$new_x)/: 0;
  50. $move_y = ($move == "y") ? ($max_y-$new_y)/: 0;
  51.  
  52. $new_img = imagecreatetruecolor($max_x, $max_y);
  53. $background = imagecolorallocate($new_img, 255, 255, 255);
  54. imagefill($new_img, 0, 0, $background);
  55. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  56.  
  57. if(exif_imagetype($save_image) == IMAGETYPE_JPEG)
  58. {
  59.  imagejpeg($new_img, $save_image, $jpeg_quality);
  60. }
  61. elseif(exif_imagetype($save_image) == IMAGETYPE_GIF)
  62. {
  63.  imagegif($new_img, $save_image);
  64. }
  65. elseif(exif_imagetype($save_image) == IMAGETYPE_PNG)
  66. {
  67.  imagepng($new_img, $save_image);
  68. }
  69.  
  70.  echo '<img src="'.$save_image.'" border="1">';
  71. }
  72.  
  73.  
  74. list($width, $height) = getimagesize($_FILES['img']['tmp_name']);
  75.  
  76. // sprawdzamy czy podany plik zostal odebrany
  77.  if (is_uploaded_file($_FILES['img']['tmp_name'])) {
  78. $nazwa_pliku=$_FILES['img']['name'];
  79.  
  80. // wyciagamy rozszrzenie skopiowanego pliku
  81. $rozsz=explode(".",$nazwa_pliku);
  82.  
  83.  
  84. if($rozsz[1]=="gif" || $rozsz[1]=="jpg" || $rozsz[1]=="jpeg" || $rozsz[1]=="png" || $rozsz[1]=="JPG" || $rozsz[1]=="JPEG") {
  85. move_uploaded_file($_FILES['img']['tmp_name'], 'obrazki/' . $_FILES['img']['name']) or die('Error moving image...');
  86. $file=$_FILES['img']['name'];
  87. resizeImage($dir . $file, 100, 100, $dir_mini . $file, 75);
  88.  
  89. echo "$file<BR>";
  90. echo "$dir<BR>";
  91. echo "$dir_mini<BR>";
  92.  
  93. } else {
  94. echo "Niewlasciwy format pliku!";
  95. }
  96. }
  97. ?>


Nie wiem co moglem zrobic zle bo juz kombinowalem na wszystkie sposoby i zmienialem chyba prawie wszystko. Wykonanie powyzszego kodu wyswietla:

  1. Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 57
  2.  
  3. Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 61
  4.  
  5. Warning: exif_imagetype(./mini/DSCK0051.JPG): failed to open stream: No such file or directory in /testowy/upload.php on line 65


Ok, juz sobie poradzilem. Dziala drugi kod, ten bez exif
amator01
przy tym skrypcie do miniatur ( 2 wersji bez exif )
mam "problem" polegajacy na mojej niewiedzy, otorz :
  1. Fatal error: Call to undefined function: imagecreatefromjpeg() in D:\USR\www\test\miniaturki.php on line 30

zapewne musze zainstalowac jakas biblioteke czy cos co ?
ktos moze mi powiedziec co ?
mam na kompie Apacha 2.0.55 + php 4.4.2
tiraeth
Nie masz biblioteki GD2+ smile.gif
tiraeth
resize.phps na tiraeth.info

Przykład użycia:
  1. <?php
  2. makeThumbnail ( 'stars_s.jpg', 117, 117, 'scale', true, 100, 'gif' );
  3. ?>

Otworzy obrazek jpg, zeskaluje do max. 117 na 117 i wyświetli jako gif.
cichy19-
Witam,

Znalazł ktoś sposób na miniaturki zdjęć z telefonu komórkowego?

Zawsze sypią się błędy.
pb17
Cytat(tiraeth @ 29.08.2006, 16:16:55 ) *
resize.phps na tiraeth.info

Przykład użycia:
  1. <?php
  2. makeThumbnail ( 'stars_s.jpg', 117, 117, 'scale', true, 100, 'gif' );
  3. ?>

Otworzy obrazek jpg, zeskaluje do max. 117 na 117 i wyświetli jako gif.


zapisałem ten kod do pliku miniatura.php

  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>
  4. <?php
  5. /***
  6.  * Author : Marcin (tiraeth) Chwedziak
  7.  * Contact : me[at]tiraeth.info
  8.  * Website : <a href="http://tiraeth.info/blog/" target="_blank">http://tiraeth.info/blog/</a>
  9.  * Created : 08/23/2006 4:41 pm
  10.  * 
  11.  * 
  12.  * mixed makeThumbnail ()
  13.  * ---
  14.  * imageHandle - name of file to create thumbnail
  15.  * destWidth - destination image width
  16.  * destHeight - destination image height
  17.  * scaleType - scale, fit or resize
  18.  * displayImage - true, if you want to display image or filename if you want to save image
  19.  * jpegQuality - quality of jpeg image if you are creating jpeg file
  20.  * returnType - destination image type (gif,jpeg,png,wbmp or default if you want to use source file type)
  21.  */
  22. function makeThumbnail ( $imageHandle, $destWidth, $destHeight, $scaleType = 'scale', $displayImage = true, $jpegQuality = 92, $returnType = 'default' )
  23. {
  24. if ( $displayImage === true ) {}
  25. else { $savePath = $displayImage; $displayImage = false; }
  26.  
  27. if ( file_exists($imageHandle) )
  28. {
  29. $imgType = getimagesize($imageHandle);
  30. $imgType = $imgType[2];
  31. switch ( $imgType )
  32. {
  33. case 1 : $imgType = 'gif'; break;
  34. case 2 : $imgType = 'jpeg'; break;
  35. case 3 : $imgType = 'png'; break;
  36. case 6 : $imgType = 'bmp'; break;
  37. default : $imgType = 'illegal';
  38. }
  39.  
  40. if ( $imgType == 'illegal' )
  41. {
  42. if ( $displayImage )
  43. {
  44. echo 'Error: Incorrect file type. You can only use GIF/JPEG/PNG and BMP files.';
  45. }
  46. else
  47. {
  48. return array('error_message' => 'Incorrect file type. You can only use GIF/JPEG/PNG and BMP files.');
  49. }
  50. }
  51.  
  52. $imgSrc = false;
  53.  
  54. switch ( $imgType )
  55. {
  56. case 'gif' :
  57. $imgSrc = @imagecreatefromgif($imageHandle);
  58. break;
  59. case 'jpeg' :
  60. $imgSrc = @imagecreatefromjpeg($imageHandle);
  61. break;
  62. case 'png' :
  63. $imgSrc = @imagecreatefrompng($imageHandle);
  64. break;
  65. case 'bmp' :
  66. $imgSrc = @imagecreatefromwbmp($imageHandle);
  67. break;
  68. }
  69.  
  70. if ( $imgSrc == '' )
  71. {
  72. if ( $displayImage )
  73. {
  74. echo 'Error: Could not create image handle.';
  75. }
  76. else
  77. {
  78. return array('error_message' => 'Could not create image handle.');
  79. }
  80. }
  81. }
  82. else
  83. {
  84. if ( $displayImage )
  85. {
  86. echo 'Error: File doesn't exists.';
  87. }
  88. else
  89. {
  90. return array('error_message' => 'File doesn't exists.');
  91. }
  92. }
  93.  
  94. $imageWidth = imagesx($imgSrc);
  95. $imageHeight = imagesy($imgSrc);
  96.  
  97. if ( $scaleType == 'scale' )
  98. {
  99. // Scale
  100. if ( $imageWidth > $imageHeight )
  101. {
  102. // Landscape
  103. $newWidth = $destWidth;
  104. $newHeight = ceil ( $imageHeight * $newWidth / $imageWidth );
  105. }
  106. elseif ( $imageWidth < $imageHeight )
  107. {
  108. $newHeight = $destHeight;
  109. $newWidth = ceil ( $imageWidth * $newHeight / $imageHeight );
  110. }
  111. else
  112. {
  113. $newWidth = $destWidth;
  114. $newHeight = $destHeight;
  115. }
  116. $movex = 0;
  117. $movey = 0;
  118.  
  119. $createWidth = $newWidth;
  120. $createHeight = $newHeight;
  121. }
  122. elseif ( $scaleType == 'fit' )
  123. {
  124. // Fit
  125. if ( $imageWidth > $imageHeight )
  126. {
  127. $newHeight = $destHeight;
  128. $newWidth = ceil ( $imageWidth * $newHeight / $imageHeight );
  129.  
  130. $movex = ceil ( ($newWidth - $destWidth)/)*-1;
  131. $movey = 0;
  132. }
  133. elseif ( $imageWidth < $imageHeight )
  134. {
  135. $newWidth = $destWidth;
  136. $newHeight = ceil ( $imageHeight * $newWidth / $imageWidth );
  137.  
  138. $movex = 0;
  139. $movey = ceil ( ($newHeight - $destHeight)/)*-1;
  140. }
  141. else
  142. {
  143. $newWidth = $destWidth;
  144. $newHeight = $destHeight;
  145.  
  146. $movex = 0;
  147. $movey = 0;
  148. }
  149.  
  150. $createWidth = $destWidth;
  151. $createHeight = $destHeight;
  152. }
  153. else
  154. {
  155. // Resize
  156. $newWidth = $destWidth;
  157. $newHeight = $destHeight;
  158. $movex = 0;
  159. $movey = 0;
  160.  
  161. $createWidth = $newWidth;
  162. $createHeight = $newHeight;
  163. }
  164.  
  165. $imgDest = imagecreatetruecolor ( $createWidth, $createHeight );
  166.  
  167. imagecopyresampled ( $imgDest, $imgSrc, $movex, $movey, 0, 0, $newWidth, $newHeight, $imageWidth, $imageHeight );
  168.  
  169. if ( $displayImage )
  170. {
  171. header("Content-type: image/" . $imgType);
  172. }
  173.  
  174. if ( $returnType == 'default' )
  175. {
  176. switch ( $imgType )
  177. {
  178. case 'gif' :
  179. if ( $displayImage ) { imagegif($imgDest); }
  180. else { imagegif($imgDest, $savePath); }
  181. break;
  182. case 'jpeg' :
  183. if ( $displayImage ) { imagejpeg($imgDest, '', $jpegQuality); }
  184. else { imagegif($imgDest, $savePath); }
  185. break;
  186. case 'png' :
  187. if ( $displayImage ) { imagepng($imgDest); }
  188. else { imagepng($imgDest, $savePath); }
  189. break;
  190. case 'bmp' :
  191. if ( $displayImage ) { imagewbmp($imgDest); }
  192. else { imagewbmp($imgDest, $savePath); }
  193. break;
  194. }
  195. }
  196. else
  197. {
  198. switch ( $returnType )
  199. {
  200. case 'gif' :
  201. if ( $displayImage ) { imagegif($imgDest); }
  202. else { imagegif($imgDest, $savePath); }
  203. break;
  204. case 'jpeg' :
  205. if ( $displayImage ) { imagejpeg($imgDest, '', $jpegQuality); }
  206. else { imagegif($imgDest, $savePath); }
  207. break;
  208. case 'png' :
  209. if ( $displayImage ) { imagepng($imgDest); }
  210. else { imagepng($imgDest, $savePath); }
  211. break;
  212. case 'bmp' :
  213. if ( $displayImage ) { imagewbmp($imgDest); }
  214. else { imagewbmp($imgDest, $savePath); }
  215. break;
  216. }
  217. }
  218.  
  219. if ( $displayImage == false )
  220. {
  221. return array(
  222. 'filename' => $imageHandle,
  223. 'save_path' => $savePath,
  224. 'image_width' => $imageWidth,
  225. 'image_height' => $imageHeight,
  226. 'return_width' => $newWidth,
  227. 'return_height' => $newHeight,
  228. 'image_type' => $imgType,
  229. 'return_type' => ( $returnType == 'default' ) ? $imgType : $returnType,
  230. 'jpeg_quality' => ( $returnType == 'jpeg' || ( $returnType == 'default' && $imgType == 'jpeg' ) ) ? $jpegQuality : false,
  231. );
  232. }
  233. }
  234.  
  235. makeThumbnail ( '1.jpg', 100, 100, 'scale', true, 100, 'jpg' );
  236. ?>

Mam plik a.jpg w tym samym katalogu co powyższy skrypt, gdy go wywołuje, ani się nie tworzy miniaturka, ani mi jej nie wyświetla ;f raportowanie błędów jak widać włączone i nic mi się nie wyświetla ;/
Zimon
a jak przerobić ten skrypt aby jeśli mamy zdjęcie wieksze niż 1024x768 to skalował je do tych wymiarów i tworzył później miniaturkę i dodawał wpis do bazy danych z linkiem do małego i dużego zdjęcia??

pomoże mi ktoś czy nie
skowron-line
getimagesize
sprawdzasz jakie ma rozmiary i jak sa za duze to zmniejszasz i dodajesz do bazy a jak nie sa to tylko dodajesz
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-2024 Invision Power Services, Inc.