Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]GD - miniaturki zdjęć przy dużych plikach
Forum PHP.pl > Forum > Przedszkole
dez
Witam, posiadam na swojej stronie uploader zdjęć i niestety nie robi miniaturek dla zdjęć większych niż 1MB ale uploaduje je. W czym tkwi problem?
  1. function resize($file, $new_w, $new_h, $save)
  2. {
  3. if (!is_readable($file))
  4. {
  5. return false;
  6. }
  7.  
  8. $info = @getimagesize($file);
  9. switch ($info['mime'])
  10. {
  11. case "image/gif":
  12. $file = imagecreatefromgif($file);
  13. break;
  14. case "image/jpg":
  15. $file = imagecreatefromjpeg($file);
  16. break;
  17. case "image/jpeg":
  18. $file = imagecreatefromjpeg($file);
  19. break;
  20. case "image/png":
  21. $file = imagecreatefrompng($file);
  22. break;
  23. default:
  24. $file = imagecreatefromjpeg($file);
  25. break;
  26. }
  27. //$sImage = file_get_contents($file);
  28. //$file = imagecreatefromstring($sImage);
  29.  
  30.  
  31.  
  32. if ($old_x > $old_y)
  33. {
  34. $thumb_w=$new_w;
  35. $thumb_h=$old_y*($new_h/$old_x);
  36. }
  37.  
  38. if ($old_x < $old_y)
  39. {
  40. $thumb_w=$old_x*($new_w/$old_y);
  41. $thumb_h=$new_h;
  42. }
  43.  
  44. if ($old_x == $old_y)
  45. {
  46. $thumb_w=$new_w;
  47. $thumb_h=$new_h;
  48. }
  49. $old_x = imageSX($file);
  50. $old_y = imageSY($file);
  51. if($info[0] > 2000 or $info[1] > 2000)
  52. {
  53. $old_x = $info[0];
  54. $old_y = $info[1];
  55. }
  56.  
  57.  
  58.  
  59. if ($old_x > $old_y)
  60. {
  61. $thumb_w=$new_w;
  62. $thumb_h=$old_y*($new_h/$old_x);
  63. }
  64.  
  65. if ($old_x < $old_y)
  66. {
  67. $thumb_w=$old_x*($new_w/$old_y);
  68. $thumb_h=$new_h;
  69. }
  70.  
  71. if ($old_x == $old_y)
  72. {
  73. $thumb_w=$new_w;
  74. $thumb_h=$new_h;
  75. }
  76. //imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  77.  
  78. $th = ImageCreateTrueColor($thumb_w, $thumb_h);
  79. imagecopyresampled($th, $file, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
  80.  
  81. switch ($info['mime'])
  82. {
  83. case "image/gif":
  84. $black = imagecolorallocate($th, 0, 0, 0);
  85. imagecolortransparent($th, $black);
  86. imagegif($th, $save);
  87. break;
  88. case "image/jpeg":
  89. imagejpeg($th, $save, 85);
  90. break;
  91. case "image/png":
  92. $black = imagecolorallocate($th, 0, 0, 0);
  93. imagecolortransparent($th, $black);
  94. imagepng($th, $save);
  95. break;
  96. default:
  97. imagejpeg($th, $save);
  98. break;
  99. }
  100.  
  101.  
  102. @imagedestroy($file);
  103. @imagedestroy($th);
  104. return true;
  105. }

dodam tylko że memory_limit mam na 128M.
Proszę o pomoc
230005
Po pierwsze - czy dostajesz jakieś błędy? Jeśli nie to czy error_reporting jest włączone? Po drugie 128M może być za mało...
thek
Memory limit to nie jedyne ograniczenie... POST także ma limit maksymalny. Popatrz w ustawienia php i sam zbadaj czy aby nie masz go właśnie na 1MB ustawionego smile.gif Zazwyczaj jest tam ciut więcej, w granicach 2MB, ale kto wie jak na Twoim serwerze mają to ustawione...
dez
Watpie żeby to był POST skoro pliki się wgrywają tylko wywala mi błąd na linijce gdy próbuje robić miniaturkę tzn createimagefromjpg... wczesniej próbowalem get_content przez createimagefromstring ale też był problem. wywala mi błąd Fatal error: Out of memory (allocated .... itd ustawiłem na dysku lokalnym memory limit na 1024M a próbuje wgrać zdjęcie o rozmiarach 6200 x 7500 i wadze 7.58MB , podkreślam plik po wgraniu się znajduje na serwerze mogę go przeglądać , tylko miniaturka się niechce stworzyć. Bardzo proszę o pomoc
230005
No toż to przecież angielski chyba znasz na tym poziomie, żeby wiedzieć, że błąd mówi właśnie o braku pamięci! A biblioteka GD jest pamięciożerna - temat z resztą już chyba parę razy poruszany na tym forum.
dez
no ale bez przesady 1GB to chyba juz całkiem sporo...
230005
Ok, sorry uznałem, że się pomyliłeś i chodzi ci o kilobajty. Ale czy faktycznie php ustawia ten limit? Spróbuj z ini_get(), po ustawieniu limitu pamięci. No i zobacz jak się skrypt zachowuje w innych warunkach - czyli jeśli to apache na Linuxie, to spróbuj uruchomić to samo pod np. xampp na windowsie i vice versa.

I jeszcze jedna rzecz mi przyszła do głowy - nie wywołujesz tam czegoś rekurencyjnie, albo w pętli, która się może nigdy nie skończyć snitch.gif?
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.