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

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: 15.09.2025 - 10:55