Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Upload + automatyczny download?
Olsz4k
post 11.07.2014, 22:07:51
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 26.07.2013
Skąd: Kraków

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


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ę!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Damonsson
post 11.07.2014, 22:40:49
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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.
Go to the top of the page
+Quote Post
timon27
post 11.07.2014, 22:51:45
Post #3





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


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

Ten post edytował timon27 12.07.2014, 07:37:56
Go to the top of the page
+Quote Post
Olsz4k
post 12.07.2014, 01:26:15
Post #4





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 26.07.2013
Skąd: Kraków

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


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?

Ten post edytował Olsz4k 12.07.2014, 01:32:10
Go to the top of the page
+Quote Post
timon27
post 12.07.2014, 07:37:42
Post #5





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
Olsz4k
post 12.07.2014, 15:47:53
Post #6





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 26.07.2013
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
timon27
post 12.07.2014, 19:07:27
Post #7





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
Olsz4k
post 12.07.2014, 19:53:30
Post #8





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 26.07.2013
Skąd: Kraków

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


Sprowadź czy nie masz przypadkiem kodowania UTF z BOM, jeśli tak, to usuń BOM

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