Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Skalowanie obrazka jpg do wykorzystania z FPDF
danon198901
post
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 26.09.2012

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


Witam,
na początek dodam, że uczę się dopiero języka PHP (na podstawie informacji zaczerpniętych z google oraz książki).
Piszę stronkę dzięki której będę mógł generować dokumenty PDF (ulotki itp). Problem mam następujący, że użytkownik może:
a ) Nie dodawać loga do dokumentu PDF
b ) Dodać wbudowane logo
c ) Wgrać własne logo, które zostanie dodane do dokumentu PDF

Z A i B problemu nie ma, jednak problem pojawia się, gdy użytkownik wrzuci własne zdjęcie, które będzie większe niż ja założyłem...wtedy wyjdzie on za ramy dokomentu, a tego nie chcę. Nie chcę również, narzucić maksymalnej wielkości zdjęcia, które użytkownik wgra. Po prostu jeśli rozdzielczość jest większa powiedzmy od 150x150 px to następuje skalowanie.

W internecie znalazłem najbardziej przemawiający do mnie skrypt php, wg. którego pobierane jest zdjęcie, następuje skalowanie i zapisanie zmienionego obrazka. Sprawdziłem, błędu nie wyrzuca, ale również nie skaluje:(

Poniżej prezentuje znaleziony kod (ścieżka jest moja):

  1. <?php
  2.  
  3. $plik = 'obrazki/slonecznik.jpeg';
  4.  
  5. function resize( $plik, $szerokosc = 55 ) {
  6.  
  7. $i = explode('.', $plik);
  8. $rozszerzenie = end($i);
  9.  
  10. if($rozszerzenie !== 'jpeg' &&
  11. $rozszerzenie !== 'gif' &&
  12. $rozszerzenie !== 'png') {
  13. return false;
  14. }
  15.  
  16. list($img_szer, $img_wys) = getimagesize($plik);
  17.  
  18. $proporcje = $img_wys / $img_szer;
  19. $wysokosc = $szerokosc * $proporcje;
  20.  
  21. $canvas = imagecreatetruecolor($szerokosc, $wysokosc);
  22.  
  23. switch($rozszerzenie) {
  24. case 'jpeg':
  25. $org = imagecreatefromjpeg($plik);
  26. break;
  27. case 'gif':
  28. $org = imagecreatefromgif($plik);
  29. break;
  30. case 'png':
  31. $org = imagecreatefrompng($plik);
  32. break;
  33. }
  34.  
  35. imagecopyresampled($canvas, $org, 0, 0, 0, 0,
  36. $szerokosc, $wysokosc, $img_szer, $img_wys);
  37.  
  38. if(imagejpeg($canvas, $plik, 70)) {
  39. return true;
  40. } else {
  41. return false;
  42. }
  43. }
  44. ?>


Jakieś sugestie? (IMG:style_emoticons/default/worriedsmiley.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
danon198901
post
Post #2





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 26.09.2012

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


Cytat
Upewnij się, że masz odpowiednie uprawnienia do zapisu pliku.


Ustawiłem na tym konkretnym obrazku maksymalne prawa (Prawy PM -> Właściwości -> Zabezpieczenia mam nadalne Pełna kontrola/Modyfikacja/Odczyt i wykonanie/Odczyt/Zapis, czyli wsio co tylko mogłem dać).
W Xampp'ie jest dołączona FileZilla, w której z tego co wiem można sprawdzić uprawnienia do plików, jednak w ogóle nie pokazuje mi żadnych plików/folderów. Na szybkiego wrzuciłem fraze w google i wychodzi na to, że będę musiał na routerze zrobić przekierowanie portów.


Cytat
A poza tym we wklejonym przez Ciebie fragmencie brakuje tylko wywołania funkcji resize.


Bez wywołania funkcji nie dostaję błędu, ani obrazek nie jest skalowany. Oto troszkę zmieniony kod:

  1. <?php
  2.  
  3. function resize( $plik, $szerokosc) {
  4.  
  5. $i = explode('.', $plik);
  6. $rozszerzenie = end($i);
  7.  
  8. if($rozszerzenie !== 'jpeg' &&
  9. $rozszerzenie !== 'gif' &&
  10. $rozszerzenie !== 'png') {
  11. return false;
  12. }
  13.  
  14. list($img_szer, $img_wys) = getimagesize($plik);
  15.  
  16. $proporcje = $img_wys / $img_szer;
  17. $wysokosc = $szerokosc * $proporcje;
  18.  
  19. $canvas = imagecreatetruecolor($szerokosc, $wysokosc);
  20.  
  21. switch($rozszerzenie) {
  22. case 'jpeg':
  23. $org = imagecreatefromjpeg($plik);
  24. break;
  25. case 'gif':
  26. $org = imagecreatefromgif($plik);
  27. break;
  28. case 'png':
  29. $org = imagecreatefrompng($plik);
  30. break;
  31. }
  32.  
  33. imagecopyresampled($canvas, $org, 0, 0, 0, 0,
  34. $szerokosc, $wysokosc, $img_szer, $img_wys);
  35.  
  36. if(imagejpeg($canvas, $plik, 70)) {
  37. return true;
  38. } else {
  39. return false;
  40. }
  41. }
  42.  
  43. resize('obrazki/slonecznik.jpeg', 150);
  44.  
  45. ?>


Bez wywołania "resize('obrazki/slonecznik.jpeg', 150);" nie dostaję żadnych błędów, ale i obrazek nie jest skalowany. Po wywołaniu funkcji dostaję następujące błędy:

Cytat
Warning: getimagesize(obrazki/slonecznik.jpeg) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\htdocs\testowanie\scale.php on line 14

Warning: Division by zero in C:\xampp\htdocs\testowanie\scale.php on line 16

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\xampp\htdocs\testowanie\scale.php on line 19

Warning: imagecreatefromjpeg(obrazki/slonecznik.jpeg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\xampp\htdocs\testowanie\scale.php on line 23

Warning: imagecopyresampled() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\testowanie\scale.php on line 34

Warning: imagejpeg() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\testowanie\scale.php on line 36



Załamka:(

Ten post edytował danon198901 5.10.2012, 20:54:59
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: 6.10.2025 - 14:06