Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wymuszenie pobierania biblioteka GD
Forum PHP.pl > Forum > Przedszkole
Olsz4k
Stworzyłem sobie skalowanie zdjęcia + nakładanie na niego znaku wodnego, jednak po kliknięciu "wyślij" chciałbym aby wyskakiwało automatyczne pobieranie. Dzieje się tak, jednak nowo pobrana miniaturka ze znakiem się nie wyświetla (czarny kwadrat), więc coś jest pewnie nie tak.
Kodowanie UTF-8 bez BOM ustawione.

  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  2.  
  3.  
  4. <form action="" method="post" enctype="multipart/form-data">
  5. <input name="image" type="file">
  6. <input name="" type="submit">
  7. </form>
  8.  
  9. <?php
  10.  
  11. $plik_tmp = $_FILES['image']['tmp_name'];
  12. $plik_nazwa = $_FILES['image']['name'];
  13. $save_file = $plik_nazwa;
  14.  
  15.  
  16. if(is_uploaded_file($plik_tmp)) {
  17. move_uploaded_file($plik_tmp, ''.$save_file.'');
  18. $znak = imagecreatefrompng('img/znak.png');
  19.  
  20.  
  21.  
  22.  
  23. $img = imagecreatefromjpeg(''.$save_file.'');
  24.  
  25. $width = imagesx($img);
  26. $height = imagesy($img);
  27. $znak_w = imagesx($znak);
  28. $znak_h = imagesy($znak);
  29. $proporcje = $height / $width;
  30. $szerokosc = 600;
  31. $wysokosc = $szerokosc * $proporcje;
  32.  
  33.  
  34.  
  35. $img_mini = imagecreatetruecolor($szerokosc, $wysokosc);
  36. header('Content-type: image/jpeg');
  37. header('Content-Type: application/octet-stream');
  38. header('Content-Disposition: attachment; filename="'.$plik_nazwa.'"');
  39. header('Content-Transfer-Encoding: binary');
  40. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $szerokosc , $wysokosc, $width , $height);
  41.  
  42. imagecopy($img_mini, $znak, 0, 10, 0, 0, $znak_w, $znak_h);
  43.  
  44. imagejpeg($img_mini, "", 100);
  45.  
  46. unlink($save_file);
  47. }
  48. ?>
  49.  


I jeszcze jedno. Jak do tego dorzucić pętlę, aby można było dodać kilkanaście/kilkadziesiąt zdjęć "na raz" i żeby po kliknięciu pobrało je wszystkie? Jest coś takiego możliwe?
Z góry dzięki za pomoc! smile.gif
SmokAnalog
Masz dwa błędy:
  1. W linii 44. drugi parametr imagejpeg nie może być pustym stringiem. Ta linijka wywala błąd, tylko nie widzisz go, bo masz ustawiony Content-type: image/jpeg. Zmień ten pusty string na null:
    1. imagejpeg($img_mini, null, 100);

    Dokumentacja imagejpeg też o tym mówi:
    Cytat
    The path to save the file to. If not set or NULL, the raw image stream will be outputted directly.

    To skip this argument in order to provide the quality parameter, use NULL.

  2. Kod HTML formularza dostaje się do kodu obrazka, bo nie jest w żadnej instrukcji warunkowej. Najlepiej umieść formularz i jego akcję w osobnych plikach, będzie czytelniej. A jeśli koniecznie w jednym, to formularz powinien być wyświetlany tylko wtedy, kiedy is_uploaded_file zwraca false.
Olsz4k
Jeśli chodzi o pkt 1 to może tak zostać - tu nie było błędu.
Problem został rozwiązany poprzez pkt 2gi - HTML musiał się wbijać w mój obrazek stąd go nie wyświetlało. Rozdzieliłem na 2 pliki i jest już wszystko w porządku, dzięki! smile.gif

Mogę prosić jeszcze o pomoc z tym multi uploadem? Widziałem gotowe rozwiązania na internecie, jednak ni cholerę nie mogę tego wstrzyknąć do siebie, tak aby po kliknięciu w wybierz zdjęcia mógł wybrać trzymając CTRL dowolną ich ilość po czym kliknąć pobierz...
SmokAnalog
Cytat(Olsz4k @ 31.07.2014, 20:02:46 ) *
Jeśli chodzi o pkt 1 to może tak zostać - tu nie było błędu.

Może zmienili to w którejś wersji PHP, bo u mnie wyrzuca błąd.

Jeśli chodzi o pobieranie wielu plików, to będziesz je musiał upchnąć do ZIP-a: http://php.net/manual/en/book.zip.php
Olsz4k
No ok, będę musiał je spakować, ale jak zliczyć ilość wybranych zdjęć?
SmokAnalog
Ale jak chcesz je przekazywać? W kilku polach input file? Jeśli tak, to nazwij je np. image[] (zauważ dwa nawiasy kwadratowe na końcu). Dzięki temu automatycznie zostaną przesłane jako tablica.

Albo jeszcze lepiej, zainteresuj się metodami przesyłania plików z HTML5: http://www.html5rocks.com/en/tutorials/file/dndfiles/
Olsz4k
Właśnie pytam o to, czy da się to zrobić na jednym inpucie, w którym wybieramy kilka zdjęć i wtedy je nam zlicza. Jest to możliwe?
SmokAnalog
Tak, zajrzyj do tego linku, który podałem. Co chcesz "zliczać"?
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.