Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> upload zdjęć + skalowanie, problem z zapisem
wude
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.08.2010

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


Witam,

Napisałem taki skrypt do uploadu zdjęć + skalowania do 4 formatów:

  1. $adres_katalogu = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'];
  2. $adres_zdj = $adres_katalogu.$zdj_ilosc.'.jpg';
  3.  
  4. //format oryginalny
  5. move_uploaded_file($plik_tmp,$adres_zdj);
  6.  
  7. $new_img=imagecreatefromjpeg($adres_zdj);
  8.  
  9. $watermark = imagecreatefrompng('../images/watermark.png');
  10. $zwX = imageSX($new_img) - imageSX($watermark);
  11. $zwY = imageSY($new_img) - imageSY($watermark);
  12. imagecopymerge($new_img, $watermark, $zwX, $zwY, 0, 0, imageSX($watermark), imageSY($watermark), 80);
  13.  
  14. imagejpeg($new_img, "$adres_zdj", 85);
  15.  
  16.  
  17. //format 20x16
  18. $adres_nowy = $adres_katalogu.$zdj_ilosc.'b.jpg';
  19.  
  20. $img=imagecreatefromjpeg($adres_zdj);
  21. $x = imagesx($img);
  22. $y = imagesy($img);
  23. $nx = 20;
  24. $ny = 16;
  25.  
  26. $new_img = imagecreatetruecolor($nx, $ny);
  27. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $nx, $ny, $x, $y);
  28. imagejpeg($new_img, "$adres_nowy", 85);
  29.  
  30. //format max 180x100
  31. $adres_nowy = $adres_katalogu.$zdj_ilosc.'c.jpg';
  32.  
  33. $img=imagecreatefromjpeg($adres_zdj);
  34. $x = imagesx($img);
  35. $y = imagesy($img);
  36. if($x > 180){
  37. $nx = 180;
  38. $ny = 180 * ($y / $x);
  39. }elseif($x < 180){
  40. $nx = $x;
  41. $ny = $y;
  42. }else{
  43. $nx = $x;
  44. $ny = $y;
  45. }
  46. if($ny > 100){
  47. $nx2 = 100 * ($nx / $ny);
  48. $ny2 = 100;
  49. }elseif($ny < 100){
  50. $nx2 = $nx;
  51. $ny2 = $ny;
  52. }else{
  53. $nx2 = $nx;
  54. $ny2 = $ny;
  55. }
  56.  
  57. $new_img = imagecreatetruecolor($nx2, $ny2);
  58. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $nx2, $ny2, $x, $y);
  59. imagejpeg($new_img, "$adres_nowy", 85);
  60.  
  61. //format max 310x240
  62. $adres_nowy = $adres_katalogu.$zdj_ilosc.'d.jpg';
  63.  
  64. $img=imagecreatefromjpeg($adres_zdj);
  65. $x = imagesx($img);
  66. $y = imagesy($img);
  67. if($x > 310){
  68. $nx = 310;
  69. $ny = 310 * ($y / $x);
  70. }elseif($x < 310){
  71. $nx = $x;
  72. $ny = $y;
  73. }else{
  74. $nx = $x;
  75. $ny = $y;
  76. }
  77. if($ny > 240){
  78. $nx2 = 240 * ($nx / $ny);
  79. $ny2 = 240;
  80. }elseif($ny < 240){
  81. $nx2 = $nx;
  82. $ny2 = $ny;
  83. }else{
  84. $nx2 = $nx;
  85. $ny2 = $ny;
  86. }
  87.  
  88. $new_img = imagecreatetruecolor($nx2, $ny2);
  89. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $nx2, $ny2, $x, $y);
  90. imagejpeg($new_img, "$adres_nowy", 85);
  91.  
  92. //format max 780x*** + watermark
  93. $adres_nowy = $adres_katalogu.$zdj_ilosc.'e.jpg';
  94.  
  95. $img=imagecreatefromjpeg($adres_zdj);
  96. $x = imagesx($img);
  97. $y = imagesy($img);
  98. if($x > 780){
  99. $nx = 780;
  100. $ny = 780 * ($y / $x);
  101. }elseif($x < 780){
  102. $nx = $x;
  103. $ny = $y;
  104. }else{
  105. $nx = $x;
  106. $ny = $y;
  107. }
  108.  
  109.  
  110. $new_img = imagecreatetruecolor($nx, $ny);
  111. imagecopyresampled($new_img, $img, 0, 0, 0, 0, $nx, $ny, $x, $y);
  112.  
  113. $watermark = imagecreatefrompng('../images/watermark.png');
  114. $zwX = imageSX($new_img) - imageSX($watermark);
  115. $zwY = imageSY($new_img) - imageSY($watermark);
  116. imagecopymerge($new_img, $watermark, $zwX, $zwY, 0, 0, imageSX($watermark), imageSY($watermark), 80);
  117.  
  118. imagejpeg($new_img, "$adres_nowy", 85);


Wiem, że lepiej by to wyglądało obiektowo, ale chcę uruchomić skrypt na razie w takiej wersji.

Problem polega na tym, że nie wszystkie skalowane zdjęcia zapisują się na serwerze. Co gorsza po serii testów trudno określić logikę, jaką kieruje się PHP nie zapisując konkretnych zdjęć, np. dodałem ostatnio 5 zdjęć i:

- wszystkie 5 zdjęć zapisały się prawidłowo w pierwszych 3 formatach (oryginalny, 20x16, 180x100)
- żadne zdjęcie nie zapisało się w 4 formacie (310x240)
- pierwsze 3 zdjęcia zapisały się w ostatnim formacie (780x***)

Macie jakieś pomysły co do przyczyn? Czy istnieje możliwość, że zarzynam pamięć serwera (768mb)? Normalnie wykorzystuję 300mb, podczas testowania skryptów było to ponad 700mb.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wude
post
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.08.2010

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


Włączyłem logi i zresetowałem serwer. Wszystkie zdjęcia na razie prawidłowo się dodają, pewnie dlatego że zużywam tylko 550/768 mb pamięci. Na błędy PHP pewnie będziemy musieli poczekać do jutra, aż zwiększy się ruch w innym serwisie i będzie większe zużycie pamięci.

Przeraża mnie to, że jeden użytkownik dodając 5 zdjęć zużywa 300 mb pamięci... Czy istnieje jakiś sposób zwolnienia pamięci z tych zdjęć po ich dodaniu?
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 5.10.2025 - 18:27