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
jaszu
moze ktos wrzucic ten kod na phpfi.com, bo forum cos psuje kody zrodlowe i mi nie chodza ;/
smarcz
  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 (ereg("image/jpeg", $typ) or ereg("image/pjpeg", $typ)){
  41.  
  42. $zdj = ImageCreateFromJpeg($plik);
  43. $zdjx = ImageSX($zdj);
  44. $zdjy = ImageSY($zdj);
  45. $y = 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(ereg("image/gif", $typ)){
  55.  
  56. $zdj = ImageCreateFromGIF($plik);
  57. $zdjx = ImageSX($zdj);
  58. $zdjy = ImageSY($zdj);
  59.  
  60. $y = 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(ereg("image/png", $typ)){
  70.  
  71. $zdj = ImageCreateFromPng($plik);
  72. $zdjx = ImageSX($zdj);
  73. $zdjy = ImageSY($zdj);
  74.  
  75. $y = 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. echo("Niepoprawny format");
  84. }
  85.  
  86. }
  87.  
  88.  
  89. ?>


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
sanchoo
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 :/
b_chmura
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 = strtolower(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. ?>
in5ane
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
piotr94
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
siemieng
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
dr revuu
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?
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.