Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [GD] Klasa obsługi obrazków
Forum PHP.pl > Forum > PHP
Kikert
Cześć,
właśnie zabrałem się za tworzenie klasy PHP mającej obsłużyć obrazek. Konkretnie wyświetlić spod danego URL-a. Poniżej kod klasy:
  1. class ManageImg {
  2.  
  3. protected $img;
  4. protected $url;
  5. protected $type;
  6.  
  7. public function _construct ($url, $type = 'jpeg') {
  8.  
  9. $this->img = imagecreatefromjpeg("$url");
  10. $this->type = $type;
  11.  
  12. }
  13.  
  14. public function show () {
  15.  
  16. Header("Content-type: image/$this->type");
  17. imagejpeg($this->img);
  18.  
  19. }
  20.  
  21. public function destroy() {
  22.  
  23. imagedestroy($this->img);
  24.  
  25. }
  26.  
  27. }

Wywołanie klasy:
  1. $myimg = new ManageImg('http://1.1.1.1/bmi/0.static.nk-net.pl/img/logo_standard_2010','jpeg');
  2. $myimg->show();
  3. $myimg->destroy();

Moje środowisko (korzystam z Eclipse) wyświetla mi 2 błędy następującej treści:
Kod
<b>Warning</b>:  imagejpeg(): supplied argument is not a valid Image resource in <b>C:\wamp\www\IMAGE\index.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>:  imagedestroy(): supplied argument is not a valid Image resource in <b>C:\wamp\www\IMAGE\index.php</b> on line <b>25</b><br />


Nie mam pojęcia od której strony próbować. Jakieś pomysły?
Smertius
Te ostrzeżenia wyświetla interpreter czy IDE?

Prawdopodobnie $this->img = imagecreatefromjpeg("$url"); nie tworzy obrazu zjadliwego dla GD. IMHO po co zmienne umieszczasz w cudzysłowach, w ten sposób tylko wydłużasz czas wykonywania skryptu.
Kikert
Usunąłem cudzysłowy i to również nie pomaga. Edit: Tak jak edycja modyfikatorów dostępu. Spróbowałem też wkleić URL bezpośrednio do funkcji - lipa. Czy to może być problem związany z uchwytem?

Komunikat wyświetla wbudowana przeglądarka, poza tym w Chrome otwarcie tego pliku wywołuje pobranie TXT, w którym również są te informacje.
Smertius
  1. <?php
  2. class ManageImg {
  3.  
  4. protected $img;
  5. protected $url;
  6. protected $type;
  7.  
  8. public function _construct ($url, $type = 'jpeg') {
  9.  
  10. $this->img = imagecreatefromjpeg("$url");
  11. $this->type = $type;
  12.  
  13. }
  14.  
  15. public function show () {
  16.  
  17. Header("Content-type: image/$this->type");
  18. imagejpeg($this->img);
  19.  
  20. }
  21.  
  22. public function destroy() {
  23.  
  24. imagedestroy($this->img);
  25.  
  26. }
  27.  
  28. }
  29.  
  30. $myimg = new ManageImg('proba.jpg');
  31. $myimg->show();
  32. $myimg->destroy();
  33. ?>


W takiej postaci jak wyżej kod działa. Może nie podajesz obrazu w odpowiednim formacie? Twoja klasa działa tylko z .jpg. To raz, dwa po co zmienna $this->type skoro klasa i tak operuje tylko i wyłącznie na jednym formacie plików graficznych, z powodzeniem możesz wszędzie wstawić jpg.
Kikert
Jeszcze mam zamiar rozbudować tą klasę.

Hm, będę musiał się pomęczyć sam.

Edit:
@Smertius, a mógłbyś spróbować na jakimś linku zewnętrznym? Chciałbym wiedzieć, czy tylko mój sprzęt ma problemy.
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.