Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Algorytmy, klasy, funkcje _ Miniaturka JPEG/GIF/PNG

Napisany przez: tiraeth 11.01.2005, 20:05:53

  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.  http://www.php.net/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.  http://www.php.net/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...

Napisany przez: son 23.01.2005, 20:09:00

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

Napisany przez: Toom 14.02.2005, 11:20:51

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?

Napisany przez: tiraeth 14.02.2005, 13:02:55

GD2 obsługuję GIFy.... testowałem pod kątem gifów na GD2/PHP5/APACHE2 i działało..

Napisany przez: Prometeus 14.02.2005, 13:05:40

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

Napisany przez: Toom 14.02.2005, 13:19:00

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?

Napisany przez: Prometeus 14.02.2005, 18:54:41

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...

Napisany przez: Toom 15.02.2005, 14:33:42

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.

Napisany przez: pys1986 2.03.2005, 12:38:43

A mi to niedziala nic sie niewyswietla i nietworzy sie zaden plik O CO CHODZI questionmark.gif?

Napisany przez: tiraeth 2.03.2005, 15:24:10

A może napiszesz co dokładnie nie działa?

Napisany przez: pys1986 2.03.2005, 20:21:10

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!

Napisany przez: miedzna 4.03.2005, 12:39:22

mi wywala :

Fatal error: Call to undefined function: exif_imagetype()

co robić?

Napisany przez: kicaj 4.03.2005, 16:08:27

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

--enable--exif

Napisany przez: tiraeth 24.03.2005, 12:47:33

NOWY KOD KTÓRY NIE WYMAGA EXIF:

  1. <?php
  2. function imgType($name)
  3. {
  4.  if(http://www.php.net/substr($name, -4, 4) == '.jpg' || http://www.php.net/substr($name, -4, 4) == 'jpeg')
  5.  {
  6. return &#092;"IMAGETYPE_JPEG\";
  7.  }
  8.  elseif(http://www.php.net/substr($name, -4, 4) == '.gif')
  9.  {
  10. return &#092;"IMAGETYPE_GIF\";
  11.  }
  12.  elseif(http://www.php.net/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.  http://www.php.net/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.  http://www.php.net/echo '<img src=\"'.$save_image.'\" border=\"1\">';
  84. }
  85. ?>

Napisany przez: darkspirit 24.03.2005, 13:18:44

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

Napisany przez: webtg 8.04.2005, 18:11:33

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

Napisany przez: maker 8.04.2005, 19:57:54

max_execution_time lub memory_limit

potrzebna pamiec jak dobrze pamietam oblicza sie wzorem

((szerokosc x wysokosc x 3)/1024)/1024 dry.gif

Napisany przez: webtg 8.04.2005, 20:06:45

To mam gdzies zadeklarować w skrypcie czy zmienić w php.ini ?

Napisany przez: Bakus 11.04.2005, 00:16:20

Wszystko jest napisane tu:

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

memory_limit - http://php.idn.net.pl/set-time-limit

Napisany przez: webtg 11.04.2005, 00:25:12

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

Napisany przez: xberus 2.08.2005, 07:25:34

  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. ?>

Napisany przez: tiraeth 2.08.2005, 08:41:54

Faktycznie smile.gif małe przeoczenie...

Napisany przez: PanGuzol 2.08.2005, 10:21:14

Oco chodzi z
--enable--exif
bo niewiem kaj to dać?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif

Napisany przez: tiraeth 2.08.2005, 10:54:26

Należy skompilować php z obsługą funkcji exif_

Napisany przez: PanGuzol 2.08.2005, 10:56:43

Można jaśniej bo dalej niekapuje?questionmark.gif

Napisany przez: tiraeth 2.08.2005, 11:39:05

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 --]

Napisany przez: bumfank 8.08.2005, 01: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

Napisany przez: Bojakki 16.08.2005, 21:38:30

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?

Napisany przez: NuLL 17.08.2005, 00:59:31

Skorzystajcie z wyszukiwarki - sam wkleiłem taką funkcję.

Napisany przez: Herf-Life 20.08.2005, 12:21:27

dobry skrypt ... ale
w $jpeg_quality najlepiej zastosować jakość 94 (nie więcej)
z doświadczenia wam to napisałem smile.gif

Napisany przez: Droopy 13.09.2005, 18:11:03

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 = http://www.php.net/strtolower(http://www.php.net/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. http://www.php.net/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. http://www.php.net/echo '<img src="'.$save_image.'" border="1">';
  65. }
  66. ?>

Napisany przez: Homiczek 21.09.2005, 20:17:22

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

Napisany przez: mike_mech 21.09.2005, 21:13:00

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.

Napisany przez: Fallout 30.09.2005, 12:09:19

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

Napisany przez: Bakus 30.09.2005, 15:18:30

  1. <?php
  2. http://www.php.net/define(MAX_WYMIAR_X, 128);
  3. http://www.php.net/define(MAX_WYMIAR_Y, 128);
  4. $dir = './obrazki/';
  5. $dir_mini = './obrazki/mini/';
  6.  
  7. if ($dh = http://www.php.net/opendir($dir))
  8. {
  9. while (($file = http://www.php.net/readdir($dh)) !== false)
  10. {
  11. if(http://www.php.net/substr($file, -3) == 'jpg' && !http://www.php.net/file_exists($dir_mini . $file))
  12. {
  13. resizeImage($dir . $file, MAX_WYMIAR_X, MAX_WYMIAR_Y, $dir_mini . $file);
  14. }
  15. }
  16. http://www.php.net/closedir($dh);
  17. }
  18. ?>

Napisany przez: Fallout 30.09.2005, 17:33:54

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. http://www.php.net/ini_set('display_errors',1);
  3. include 'db_engine.php';
  4. include 'resize.inc.php';
  5.  
  6. http://www.php.net/define(MAX_WYMIAR_X, 100);
  7. http://www.php.net/define(MAX_WYMIAR_Y, 75);
  8.  
  9. $db = new dbengine();
  10. $db->polacz();
  11.  
  12. if (http://www.php.net/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 = http://www.php.net/mysql_result($db->wynik,0,0);
  18. $dir = './galerie/'.$kat.'/';
  19. $dir_mini = './galerie/'.$kat.'/mini/';
  20. if ($dh = http://www.php.net/opendir($dir))
  21. {
  22. while (($file = http://www.php.net/readdir($dh)) !== false)
  23. {
  24. http://www.php.net/echo $dir. $file. '<br>';
  25. http://www.php.net/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. http://www.php.net/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=http://www.php.net/mysql_fetch_array($w))
  51. {
  52. $id  = $r['id_galerii'];
  53. $opis = $r['nazwa_galerii'];
  54.  
  55. http://www.php.net/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((http://www.php.net/substr($name, -4, 4) == '.JPG')OR(http://www.php.net/substr($name, -4, 4) == '.jpg'))
  5.  {
  6. return "IMAGETYPE_JPEG";
  7.  }
  8.  elseif(http://www.php.net/substr($name, -4, 4) == '.gif')
  9.  {
  10. return "IMAGETYPE_GIF";
  11.  }
  12.  elseif(http://www.php.net/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

Napisany przez: Bakus 30.09.2005, 22:00:48

  1. <?php
  2. if(((http://www.php.net/substr($file, -3,3) == 'jpg') or (http://www.php.net/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 = http://www.php.net/array("jpg", "png", "gif");
  3. if(http://www.php.net/in_array(http://www.php.net/substr(http://www.php.net/strtolower($file), -3,3), $typy))
  4. {
  5. if(http://www.php.net/file_exists($dir_mini . $file))
  6. {
  7. http://www.php.net/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. ?>

Napisany przez: Fallout 2.10.2005, 13:16:31

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

Napisany przez: Markym 1.04.2006, 02:43:33

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

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


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.

Napisany przez: intol 12.04.2006, 20:36:34

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.

Napisany przez: JOHNY 20.04.2006, 19:28:09

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

Napisany przez: tiraeth 20.04.2006, 19:34:56

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

Napisany przez: MalyKazio 1.06.2006, 11:43:56

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.  http://www.php.net/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.  http://www.php.net/echo '<img src="'.$save_image.'" border="1">';
  71. }
  72.  
  73.  
  74. list($width, $height) = http://www.php.net/getimagesize($_FILES['img']['tmp_name']);
  75.  
  76. // sprawdzamy czy podany plik zostal odebrany
  77.  if (http://www.php.net/is_uploaded_file($_FILES['img']['tmp_name'])) {
  78. $nazwa_pliku=$_FILES['img']['name'];
  79.  
  80. // wyciagamy rozszrzenie skopiowanego pliku
  81. $rozsz=http://www.php.net/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. http://www.php.net/move_uploaded_file($_FILES['img']['tmp_name'], 'obrazki/' . $_FILES['img']['name']) or http://www.php.net/die('Error moving image...');
  86. $file=$_FILES['img']['name'];
  87. resizeImage($dir . $file, 100, 100, $dir_mini . $file, 75);
  88.  
  89. http://www.php.net/echo "$file<BR>";
  90. http://www.php.net/echo "$dir<BR>";
  91. http://www.php.net/echo "$dir_mini<BR>";
  92.  
  93. } else {
  94. http://www.php.net/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

Napisany przez: amator01 26.08.2006, 19:30:47

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

Napisany przez: tiraeth 26.08.2006, 20:16:17

Nie masz biblioteki GD2+ smile.gif

Napisany przez: tiraeth 29.08.2006, 16:16:55

http://tiraeth.info/blog/code/resize.phps

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.

Napisany przez: cichy19- 3.09.2006, 18:26:30

Witam,

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

Zawsze sypią się błędy.

Napisany przez: pb17 11.11.2006, 17:57:28

Cytat(tiraeth @ 29.08.2006, 16:16:55 ) *
http://tiraeth.info/blog/code/resize.phps

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

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 ;/

Napisany przez: Zimon 26.11.2006, 09:49:38

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

Napisany przez: skowron-line 26.11.2006, 11:00:09

http://pl2.php.net/manual/pl/function.getimagesize.php
sprawdzasz jakie ma rozmiary i jak sa za duze to zmniejszasz i dodajesz do bazy a jak nie sa to tylko dodajesz

Napisany przez: jaszu 8.06.2007, 09:52:47

moze ktos wrzucic ten kod na phpfi.com, bo forum cos psuje kody zrodlowe i mi nie chodza ;/

Napisany przez: smarcz 25.07.2007, 12:05:55

  1. <?
  2. /*
  3. Funkcja która zapisuje przekazywany w formularzu obrazek do odpowiedniego format
    u oraz rozdzielczości.
  4.  
  5. Funkcja posiada 4 (cztery) argumenty,
  6. $roz - rodzielczość w jakiej ma być zapisany nowy obraz
  7. $img - nazwa pola z którego przekazywany jest obrazek
  8. $sciezka - sciezka zapisu obrazka
  9. $nnazwa - nowa nazwa nadana obrazkowi po stronie serwera
  10. */
  11.  
  12. function zap_img_x($roz, $img, $sciezka, $nnazwa){
  13.  
  14. ///echo "Jaka rozdzielczość - $roz<br>";
  15. //echo "Jaka nazwa pliku - $img<br>";
  16. //echo "Jaka ścieżka zapisu - $sciezka<br>";
  17. //echo "Nowa nazwa pliku - $nnazwa<br>";
  18.  
  19. //1.) Określam parametry zdjęcia - typ, zapisuje ściężkę tmp_name do zmiennej - plik
  20. $typ = $_FILES['img']['type'];
  21. $plik = $_FILES['img']['tmp_name'];
  22.  
  23. //echo "PLIK - $plik<br>";
  24.  
  25. //2.) Określam szerokość w pixelach
  26. $x = $roz;
  27.  
  28. //echo "X - $x<br>";
  29. //3.) Nadaję nową nazwę dla zdjęcia
  30.  
  31. $mojaNazwa1 = $nnazwa . '.jpg';
  32.  
  33. //echo "Nazwa - $mojaNazwa1<br>";
  34.  
  35.  
  36.  
  37. //5.) Zapisuje obraz w odpowiednim formacie
  38. //Przetwarzanie obrazka z formatu jpg i jpeg
  39.  
  40. if (http://www.php.net/ereg("image/jpeg", $typ) or http://www.php.net/ereg("image/pjpeg", $typ)){
  41.  
  42. $zdj = ImageCreateFromJpeg($plik);
  43. $zdjx = ImageSX($zdj);
  44. $zdjy = ImageSY($zdj);
  45. $y = http://www.php.net/ceil($zdjy*($x/$zdjx));
  46. $nowezdj = imagecreatetruecolor($x, $y);
  47. imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy);
  48. imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,120);
  49. imagedestroy($zdj);
  50. //echo "$zdjx, $zdjy, $x, $y, $nowezdj<br> $sciezka . $mojaNazwa1 ok";
  51. }
  52.  
  53. //Przetwarzanie obrazka z formatu gif
  54. elseif(http://www.php.net/ereg("image/gif", $typ)){
  55.  
  56. $zdj = ImageCreateFromGIF($plik);
  57. $zdjx = ImageSX($zdj);
  58. $zdjy = ImageSY($zdj);
  59.  
  60. $y = http://www.php.net/ceil($zdjy*($x/$zdjx));
  61. $nowezdj = imagecreatetruecolor($x, $y);
  62. imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy);
  63. imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,100);
  64. imagedestroy($zdj);
  65. //echo "ok";
  66. }
  67.  
  68. //Przetwarzanie obrazka z formatu png
  69. elseif(http://www.php.net/ereg("image/png", $typ)){
  70.  
  71. $zdj = ImageCreateFromPng($plik);
  72. $zdjx = ImageSX($zdj);
  73. $zdjy = ImageSY($zdj);
  74.  
  75. $y = http://www.php.net/ceil($zdjy*($x/$zdjx));
  76. $nowezdj = imagecreatetruecolor($x, $y);
  77. imagecopyresampled($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy);
  78. imagejpeg($nowezdj, $sciezka . $mojaNazwa1 ,100);
  79. imagedestroy($zdj);
  80. //echo "ok";
  81. }
  82. else{
  83. http://www.php.net/echo("Niepoprawny format");
  84. http://www.php.net/exit;
  85. }
  86.  
  87. }
  88.  
  89.  
  90. ?>


Co do memory limit - to działa to tak, żeby nie przerwać skryptu należy wcześniej opracować warunek, który sprawdza szerokość x wysokość obrazka i pomnożyć przez odpowiedni współczynnik. W zależności od rozdzielczości obrazka waha się on od 3 i więcej - najbardziej optymalny z moich testów to 5
Nie należy przekroczyć 3 MB pamięci po stronie serwera

Napisany przez: sanchoo 12.09.2007, 14:49:44

a jaj mam problem :/ caly kod przechodzi nie wywala bledu.. a miniaturki nie ma :/
...sprawdzalem "gdzie zapisuje" podaje nawet sciezke z home.. /home/user//sa..... nie wiem co sie dzieje :/

Napisany przez: b_chmura 9.12.2007, 19:53:07

Trochę zmieniłem w/w funkcję. Teraz jeśli podana szerokość lub wysokość jest większa jak ta w oryginalnym obrazku to zostaje ona zmniejszona do tej mniejszej (oryginalnej).

Kod

  1. <?php
  2. function img_typ($name) 
  3. {
  4. $name = http://www.php.net/strtolower(http://www.php.net/substr($name, -4, 4));
  5.  
  6. if($name == '.jpg' OR $name == 'jpeg') 
  7. {
  8. return ".jpg";
  9. }
  10. elseif($name == '.gif') 
  11. {
  12. return ".gif";
  13. }
  14. elseif($name == '.png')
  15. {
  16. return ".png";
  17. }
  18. }
  19. /////////////////////////////////////////////////////////////////////////////////////
  20. function mini($in, $max_width, $max_height, $out, $jakosc) 
  21. {
  22.  
  23. $typ = img_typ($in);
  24.  
  25. if ($typ == ".jpg") {$img_src = imagecreatefromjpeg($in);}
  26. elseif($typ == ".gif") {$img_src = imagecreatefromgif($in); }
  27. elseif($typ == ".png") {$img_src = imagecreatefrompng($in); }
  28.  
  29. $x = imagesx($img_src);
  30. $y = imagesy($img_src);
  31.  
  32. if($x > $y) 
  33. {
  34. $xr = ($x > $max_width)$max_width/$x : 1;
  35. $yr = $xr;
  36. }
  37. else 
  38. {
  39. $yr = ($y > $max_height)$max_height/$y : 1;
  40. $xr = $yr;
  41. }
  42.  
  43. $new_x = $x*$xr;
  44. $new_y = $y*$yr;
  45.  
  46. $new_img = imagecreatetruecolOR($new_x, $new_y);
  47. $background = imagecolORallocate($new_img, 255, 255, 255);
  48.  
  49. imagefill($new_img, 0, 0, $background);
  50. imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $x, $y);
  51.  
  52. $typ = img_typ($out);
  53.  
  54. if ($typ == ".jpg") {imagejpeg($new_img, $out, $jakosc);}
  55. elseif($typ == ".png") { imagepng($new_img, $out, $jakosc);}
  56. elseif($typ == ".gif") { imagegif($new_img, $out);  }
  57. }
  58. ?>

Napisany przez: in5ane 17.12.2007, 07:56:23

Przepraszam, ale mam pytanie. I który skrypt wykorzystać? Ale też ten do tych duuuużych obrazków. Z góry dziękuję smile.gif

Napisany przez: piotr94 11.03.2009, 17:41:33

Witam!.
Nie ważne z którego skryptu korzystam, nie działają one przy większych obrazkach.
czy znacie jakies skrypty które poradzą sobie z większymi od 1024*768 questionmark.gif

Napisany przez: siemieng 2.04.2009, 23:35:43

Cytat(piotr94 @ 11.03.2009, 18:41:33 ) *
Witam!.
Nie ważne z którego skryptu korzystam, nie działają one przy większych obrazkach.
czy znacie jakies skrypty które poradzą sobie z większymi od 1024*768 questionmark.gif


Brak możliwości obróbki obrazków większych niż 1024x768 nie wynika z właściwości skryptu, lecz z ustawień serwera:

1. Edytuj php.ini
2. Znajdź memory_limit (u mnie lokalnie: "memory_limit = 10M ; Maximum amount of memory a script may consume (128MB)")
3. Zwiększ do 50M

I będzie gitara guitar.gif

Napisany przez: dr revuu 9.07.2011, 20:10:19

Z góry przepraszam za odkop, ale skrypt (post 1) nadal wydaje się dobry, a mam z nim problem.

Otóż wrzucam go do NetBeans i w tych liniach wskazuje mi na błąd:

$move_x = ($move == \"x\") ? ($max_x-$new_x)/2 : 0;
$move_y = ($move == \"y\") ? ($max_y-$new_y)/2 : 0;


Od znaku # skrypt staje się szary (taki sam kolor mają u mnie komentarze, np. te po //). Po wrzuceniu na serwer klasy z tą funkcją, skrypt się zatrzymuje.

Jakieś sugestie?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)