Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]GD - miniaturki zdjęć przy dużych plikach
dez
post 22.03.2010, 17:06:26
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
230005
post 22.03.2010, 20:39:37
Post #2





Grupa: Zarejestrowani
Postów: 316
Pomógł: 36
Dołączył: 2.04.2008

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
thek
post 22.03.2010, 21:35:28
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
dez
post 22.03.2010, 21:51:47
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
230005
post 22.03.2010, 22:23:36
Post #5





Grupa: Zarejestrowani
Postów: 316
Pomógł: 36
Dołączył: 2.04.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował 230005 22.03.2010, 22:24:50
Go to the top of the page
+Quote Post
dez
post 22.03.2010, 22:26:43
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2009

Ostrzeżenie: (0%)
-----


no ale bez przesady 1GB to chyba juz całkiem sporo...
Go to the top of the page
+Quote Post
230005
post 22.03.2010, 23:22:25
Post #7





Grupa: Zarejestrowani
Postów: 316
Pomógł: 36
Dołączył: 2.04.2008

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 21:47