Witam Was drodzy użytkownicy forum PHP. Mam pewien problem ze skryptem uploadu kilku zdjęć. Sam upload działa bez problemu, lecz gdy próbuję dodać znak wodny do każdego zdjęcia to zaczynają się schody. Czysty kod PHP uploadu zdjęć wygląda następująco(uprzedzam, że nie zrobiłem jeszcze weryfikacji czy zdjęcie to serio zdjęcie.):
  1. if(!empty($_FILES["images"]))
  2. {
  3.  
  4.  
  5. while(list($key,$value) = each($_FILES["images"]["name"]))
  6. {
  7. if(!empty($value))
  8. {
  9. $NewImageName = $t."_".$value;
  10. $uploaded = "img/".$NewImageName. $_FILES["images"][$key];
  11. move_uploaded_file($_FILES["images"]['tmp_name'][$key],$uploaded);
  12.  
  13. $MyImages[] = $NewImageName;
  14. }
  15. }
  16.  
  17. if(!empty($MyImages))
  18. {
  19. $ImageStr = implode("|", $MyImages);
  20. }


Kod, znaku wodnego, który dodaję wygląda następująco:
  1. if(is_uploaded_file($plik_tmp)) {
  2. move_uploaded_file($plik_tmp, ''.$save_file.'');
  3. echo "wszystko poszlo ok";
  4. $znak = imagecreatefrompng('wodny.png');
  5. $img = imagecreatefromjpeg($save_file);
  6.  
  7. $plik_w = imagesx($img);
  8. $plik_h = imagesy($img);
  9.  
  10. $znaczek_w = imagesx($znak);
  11. $znaczek_h = imagesy($znak);
  12.  
  13.  
  14. $od_x = $plik_w - $znaczek_w;
  15. $od_y = $plik_h - $znaczek_h;
  16.  
  17.  
  18. imagecopy($img, $znak, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h);
  19. imagejpeg($img, $save_file, 100);

Sam ten kod bez użycia pętli, czyli przy jednym pliku działa bez zarzutu. Znaczek wodny się dodaje.

Po połączeniu tych dwóch skryptów kod prezentuje się następująco
  1. if(!empty($_FILES["images"]))
  2. {
  3.  
  4.  
  5. while(list($key,$value) = each($_FILES["images"]["name"]))
  6. {
  7. if(!empty($value))
  8. {
  9.  
  10.  
  11.  
  12.  
  13. $NewImageName = $t."_".$value;
  14. $uploaded = "img/".$NewImageName. $_FILES["images"][$key];
  15.  
  16.  
  17. //kod, który odpowoada za dodanie znaku wodnego do każdego zdjęcia
  18.  
  19. $znak = imagecreatefrompng('images/wodny.png');
  20. $img = imagecreatefromjpeg($NewImageName. $_FILES["images"][$key]);
  21.  
  22. $plik_w = imagesx($img);
  23. $plik_h = imagesy($img);
  24.  
  25. $znaczek_w = imagesx($znak);
  26. $znaczek_h = imagesy($znak);
  27.  
  28.  
  29. $od_x = $plik_w - $znaczek_w;
  30. $od_y = $plik_h - $znaczek_h;
  31.  
  32.  
  33. imagecopy($img, $znak, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h);
  34. imagejpeg($img, $save_file, 100);
  35.  
  36.  
  37. move_uploaded_file($_FILES["images"]['tmp_name'][$key],$uploaded);
  38.  
  39. $MyImages[] = $NewImageName;
  40.  
  41.  
  42. }
  43. }
  44.  
  45. if(!empty($MyImages))
  46. {
  47. $ImageStr = implode("|", $MyImages);
  48. }

I tu się pojawia problem, ponieważ użytkownik może dodać trzy pliki na raz i niestety jest klapa. Pliki owszem się uploadują na serwer, a ich ścieżki do bazy danych, lecz na plikach nie pojawia się znak wodny. Po kliknięciu w przycisk formularza wyświetlają się następujące błędy:
Warning: imagecreatefromjpeg(1447119122_Chrysanthemum.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in c:\usr\krasnal\www\ogloszenia\dodaj.php on line 80

Warning: imagesx(): supplied argument is not a valid Image resource in c:\usr\krasnal\www\ogloszenia\dodaj.php on line 82

Warning: imagesy(): supplied argument is not a valid Image resource in c:\usr\krasnal\www\ogloszenia\dodaj.php on line 83

Warning: imagecopy(): supplied argument is not a valid Image resource in c:\usr\krasnal\www\ogloszenia\dodaj.php on line 93

Warning: imagejpeg(): supplied argument is not a valid Image resource in c:\usr\krasnal\www\ogloszenia\dodaj.php on line 94


W jaki sposób mogę ten błąd rozwiązać? Siedzę nad tym od kilku godzin, korzystałem z wyszukiwarki zarówno na forum, jak i GOOGLE, lecz niestety nie znalazłem rozwiązania mojego problemu. Korzystałem również z:
KLIK
KLIK
KLIK
KLIK
Będę Wam bardzo wdzięczny za jakąkolwiek pomoc/wskazówkę.

Już sobie poradziłem. Bez żadej pomocy po kilku minutach myślenia udało się smile.gif. Dla poszukujących oto kod uploadu kilku plików i dania im znaku wodnego:
  1. if(!empty($_FILES["images"]))
  2. {
  3.  
  4.  
  5. while(list($key,$value) = each($_FILES["images"]["name"]))
  6. {
  7. if(!empty($value))
  8. {
  9. $NewImageName = $t."_".$value;
  10. $uploaded = "img/".$NewImageName. $_FILES["images"][$key];
  11. $znak = imagecreatefrompng('images/wodny.png');
  12. $img = imagecreatefromjpeg($_FILES["images"]['tmp_name'][$key]);
  13. $plik_w = imagesx($img);
  14. $plik_h = imagesy($img);
  15. $znaczek_w = imagesx($znak);
  16. $znaczek_h = imagesy($znak);
  17. $od_x = $plik_w - $znaczek_w;
  18. $od_y = $plik_h - $znaczek_h;
  19. imagecopy($img, $znak, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h);
  20. imagejpeg($img, $_FILES["images"]['tmp_name'][$key], 100);
  21. move_uploaded_file($_FILES["images"]['tmp_name'][$key],$uploaded);
  22. $MyImages[] = $NewImageName;
  23. }
  24. }
  25.  
  26. if(!empty($MyImages))
  27. {
  28. $ImageStr = implode("|", $MyImages);
  29. }