Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Upload + automatyczny download?
Forum PHP.pl > Forum > Przedszkole
Olsz4k
Stworzyłem dodawanie automatyczne znaku wodnego do moich zdjęć, kod wygląda tak:

  1. <form action="" method="post" enctype="multipart/form-data">
  2. <input name="image" type="file">
  3. <input name="" type="submit">
  4. </form>
  5.  
  6. <?php
  7.  
  8. $plik_tmp = $_FILES['image']['tmp_name'];
  9. $plik_nazwa = $_FILES['image']['name'];
  10.  
  11. $save_file = $plik_nazwa;
  12.  
  13.  
  14. if(is_uploaded_file($plik_tmp)) {
  15. move_uploaded_file($plik_tmp, ''.$save_file.'');
  16. echo "Wszystko poszło OK";
  17.  
  18. $znak = imagecreatefrompng('znak.png');
  19. $img = imagecreatefromjpeg($save_file);
  20. $plik_w = imagesx($img);
  21. $plik_h = imagesy($img);
  22. $znak_w = imagesx($znak);
  23. $znak_h = imagesy($znak);
  24.  
  25.  
  26. $od_x = $plik_w - $znak_w -5;
  27. $od_y = $plik_h - $znak_h -5;
  28.  
  29.  
  30. imagecopy($img, $znak, $od_x, $od_y, 0, 0, $znak_w, $znak_h);
  31. imagejpeg($img, $save_file, 100);
  32.  
  33.  
  34. }
  35.  
  36. ?>


Jednak nie o to mi dokładnie chodziło. Czy jest możliwość niezapisywania nowo utworzonego obrazka (już ze znakiem) tylko po kliknięciu "wyślij" rozpoczęcie pobierania go i zapisania w dowolnym miejscu?

I jeszcze drugie pytanie, czy jest możliwość wyboru kilki obrazków "na raz", tak aby znak wodny dokleił się do każdego z nich?

Za wszystkie wskazówki dziękuję!
Damonsson
Operuj np na base64 zamiast zapisywać obrazek i później wykorzystaj imagecreatefromstring o ile się nie mylę.

A obrazki możesz sobie wczytać ile chcesz, a później puścić przez pętle wszystko.
timon27
Proszę:

  1. <?php
  2. if(isset($_FILES['image']['tmp_name'])){
  3. $plik_tmp = $_FILES['image']['tmp_name'];
  4. $plik_nazwa = $_FILES['image']['name'];
  5.  
  6. $save_file = $plik_nazwa;
  7.  
  8.  
  9. if(is_uploaded_file($plik_tmp)) {
  10. move_uploaded_file($plik_tmp, ''.$save_file.'');
  11.  
  12.  
  13. $znak = imagecreatefrompng('znak.png');
  14. $img = imagecreatefromjpeg($save_file);
  15. $plik_w = imagesx($img);
  16. $plik_h = imagesy($img);
  17. $znak_w = imagesx($znak);
  18. $znak_h = imagesy($znak);
  19.  
  20.  
  21. $od_x = $plik_w - $znak_w -5;
  22. $od_y = $plik_h - $znak_h -5;
  23. header('Content-type: image/jpeg');
  24.  
  25. header('Content-Type: application/octet-stream');
  26. header('Content-Disposition: attachment; filename="'.$plik_nazwa.'"');
  27. header('Content-Transfer-Encoding: binary');
  28. imagecopy($img, $znak, $od_x, $od_y, 0, 0, $znak_w, $znak_h);
  29. imagejpeg($img, '', 100);
  30.  
  31.  
  32.  
  33. }
  34. }else{
  35.  
  36. <form action="" method="post" enctype="multipart/form-data">
  37. <input name="image" type="file">
  38. <input name="" type="submit">
  39. </form>
  40. ';
  41.  
  42. }
  43. ?>


Zmiany:
- if aby formularz się nie wyświetlał w drugim kroku
- drugi argument funkcji imagejpeg - zmiana na pusty powoduje że zdjęcie się wyświetla a nie zapisuje
- Headery zmuszające do pobrania pliku
Olsz4k
timon27
Nie chciałem gotowca, jednak dziękuję za podrzucenie go.

Jednak, czy mógłby ktoś jeszcze dogłębniej wytłumaczyć propozycję Damonsson'a? Bo rozumiem, że zaproponował on inne rozwiązanie.

edit:
timon27, Twój sposób jednak coś nie działa?
timon27
Cytat(Olsz4k @ 12.07.2014, 02:26:15 ) *
Nie chciałem gotowca, jednak dziękuję za podrzucenie go.

więc pod spodem opisałem zmiany.

Cytat(Olsz4k @ 12.07.2014, 02:26:15 ) *
timon27, Twój sposób jednak coś nie działa?

Racja, w pierszym ifie sprawdzałem istnienie $_FILES a okazuje się że to zawsze istnieje. Już poprawiłem.
Skrypt wrzuciłem na serwer. Działa.
Olsz4k
timon27
To sobie akurat poprawiłem, bardziej chodziło mi o to, że plik który się utworzy i pobierze jest zły, ponieważ wyświetla mi czarny obraz i nieprawidłowe zdjęcie, więc coś jest nie tak.
timon27
Co oznacza "nieprawidłowe zdjęcie"?
Skoro u mnie działa to sttrzelam że problem z header.

1. Sprawdź czy przed <? nie ma żadnego znaku.
2. Nie dopisałeś żadnego echo?
3. Sprowadź czy nie masz przypadkiem kodowania UTF z BOM, jeśli tak, to usuń BOM
Olsz4k
Sprowadź czy nie masz przypadkiem kodowania UTF z BOM, jeśli tak, to usuń BOM

Pomogło. smile.gif Dzięki bardzo!
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.