Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Upload obrazków, wydajność
Bajki
post
Post #1





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


Witam
dopiero zaczynam zabawe z biblioteką GD i mam pewne pytanie z serii 'czy dobrze rozumuje' ;P
z tego co widze w przykładach, biblioteka ta moze dokonywac operacjii na plikach juz wrzuconych na serwer.

Oto co powinno sie dziać :
1. Użytkownik wybiera obrazek z dysku w formularzu i wciska 'wyślij'
2. Tworzone są 3 wersje pliku :
*miniatura
*średni rozmiar
*maksymalny rozmiar (jednak nie taki jak oryginal ale z jakimiś limitami wysokości i szerokości (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )


i teraz moje pytanie, czy taki sposób wrzucania pliku jest wydajny, nie przekombinowany i cyz nie istnieja jakies prostsze sposoby (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) oto pomysł :

1. Upload pliku do jakiegoś tymczasowego folderu TEMP (w oryginalnych rozmiarach)
2. Stworzenie miniatury, stworzenie średniego formatu i stworzenie najwiekszej wersjii przy pomocy biblioteki GD oraz zapisywanie tych wersjii w odpowiednich folderach
3. Usunięcie oryginalnego pliku z folderu TEMP

Prosze o jakieś pomysły i sugestie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


A o co dokladnie chodzi??

Nie potrafisz zrobic funckji skalujacej nie wiesz jak napisac upload czy pytasz sie czy mozna zrobic tak jak ty piszesz jesli tak to odpowiedz jest tak (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , jesli prosisz o szczegoly napisz co dokladnie chcesz wiedziec

Cytat
czy taki sposób wrzucania pliku jest wydajny

TEgo to ci nie powiem bo nie wiem czy mozna to jakos w locie zrobic nie wgrywajac pliku na server wiec niech inni sie wypowiedza
Go to the top of the page
+Quote Post
Bajki
post
Post #3





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


hmm no wsumie to wyjasniles wszystko co chcialem wiedziec (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

jednak pojawia sie problem, otoz majac taki skrypt :

  1. <?php
  2. header("Content-type: image/jpeg");
  3. class Obrazek {
  4. private $obrazek;
  5. function __construct ( $sciezka_pliku_jpg ) {
  6. $this->obrazek = @imagecreatefromjpeg( $sciezka_pliku_jpg )
  7. or die( "Nie można zainicjować strumienia GD" );
  8. }
  9. function destruct() {
  10. imagedestroy ( $this->obrazek );
  11. }
  12. public function resize ( $tbx , $tby ) {
  13. $ow = imagesx($this->obrazek);
  14. $oh = imagesy($this->obrazek);
  15. $mid['ow'] = $tbx;
  16. $mid['oh'] = $tby;
  17. if ( $ow > $oh and $mid['oh'] > $oh) {
  18. $mid['width'] = $mid['ow'];
  19. $mid['height'] = $oh/$ow * $mid['ow'];
  20. $mid_pot['width'] = 0;
  21. $mid_pot['height'] = ($mid['oh'] - $mid['height']) / 2;
  22. } 
  23. else {
  24. $mid['height'] = $mid['oh'];
  25. $mid['width'] = $ow/$oh * $mid['oh'];
  26. $mid_pot['height'] = 0;
  27. $mid_pot['width'] = ($mid['ow'] - $mid['width']) / 2;
  28. }
  29. $tb = imagecreatetruecolor ( $mid['ow'], $mid['oh'] );
  30. imagecopyresized ( $tb , $this->obrazek , $mid_pot['width'],
  31. $mid_pot['height'], 0, 0,
  32. $mid['width'], $mid['height'], $ow, $oh );
  33. return $tb;
  34. }
  35. }
  36.  
  37. $obiektObrazka = new Obrazek ( "img.jpg" );
  38. imagejpeg ( $obiektObrazka->resize (160, 90) );
  39. ?>


wywala mi
  1. Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in C:\Program Files\WebServ\httpd\img\img.php on line 4


Myslalem ze pracujac na przykladach jakos dojde jak obsluguje sie GD no ale troche sie mylilem jak widze ;P
Go to the top of the page
+Quote Post
em1X
post
Post #4





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Ludzie, czy wy nie macie tabulatorów tylko piszecie wszystko jednym ciurkiem.. to tak jak pisać wypracowanie bez kropek i przecinków. Potem się dziwisz, że błędów nie potrafisz znaleźć.

1) powinno być __destruct nie destruct()

  1. <?php
  2. class Obrazek
  3. {
  4. private $obrazek;
  5.  
  6. function __construct ( $sciezka_pliku_jpg )
  7. {
  8. $this->obrazek = @imagecreatefromjpeg( $sciezka_pliku_jpg ) or die( "Nie mo�na zainicjowa� strumienia GD" );
  9. }
  10.  
  11. function __destruct()
  12. {
  13. imagedestroy ( $this->obrazek );
  14. }
  15.  
  16. public function resize ( $tbx , $tby )
  17. {
  18. $ow = imagesx($this->obrazek);
  19. $oh = imagesy($this->obrazek);
  20. $mid['ow'] = $tbx;
  21. $mid['oh'] = $tby;
  22.  
  23. if ( $ow > $oh and $mid['oh'] > $oh)
  24. {
  25. $mid['width'] = $mid['ow'];
  26. $mid['height'] = $oh/$ow * $mid['ow'];
  27. $mid_pot['width'] = 0;
  28. $mid_pot['height'] = ($mid['oh'] - $mid['height']) / 2;
  29. } 
  30. else
  31. {
  32. $mid['height'] = $mid['oh'];
  33. $mid['width'] = $ow/$oh * $mid['oh'];
  34. $mid_pot['height'] = 0;
  35. $mid_pot['width'] = ($mid['ow'] - $mid['width']) / 2;
  36. }
  37.  
  38. $tb = imagecreatetruecolor ( $mid['ow'], $mid['oh'] );
  39. imagecopyresized ( $tb , $this->obrazek , $mid_pot['width'],
  40. $mid_pot['height'], 0, 0,
  41. $mid['width'], $mid['height'], $ow, $oh );
  42.  
  43. return $tb;
  44. }
  45. }
  46.  
  47. header("Content-type: image/jpeg");
  48.  
  49. $obiektObrazka = new Obrazek ( "img.jpg" );
  50. imagejpeg ( $obiektObrazka->resize (160, 90) );
  51. ?>


Kod jest dobry. Tylko Ty masz stare PHP w wersji 4, do tego skryptu wymagane jest PHP w wersji >5.
Wersja PHP4:

  1. <?php
  2. class Obrazek
  3. {
  4. var $obrazek;
  5.  
  6. function Obrazek ( $sciezka_pliku_jpg )
  7. {
  8. $this->obrazek = @imagecreatefromjpeg( $sciezka_pliku_jpg ) or die( "Nie mo�na zainicjowa� strumienia GD" );
  9. }
  10.  
  11. function __destruct()
  12. {
  13. imagedestroy ( $this->obrazek );
  14. }
  15.  
  16. public function resize ( $tbx , $tby )
  17. {
  18. $ow = imagesx($this->obrazek);
  19. $oh = imagesy($this->obrazek);
  20. $mid['ow'] = $tbx;
  21. $mid['oh'] = $tby;
  22.  
  23. if ( $ow > $oh and $mid['oh'] > $oh)
  24. {
  25. $mid['width'] = $mid['ow'];
  26. $mid['height'] = $oh/$ow * $mid['ow'];
  27. $mid_pot['width'] = 0;
  28. $mid_pot['height'] = ($mid['oh'] - $mid['height']) / 2;
  29. } 
  30. else
  31. {
  32. $mid['height'] = $mid['oh'];
  33. $mid['width'] = $ow/$oh * $mid['oh'];
  34. $mid_pot['height'] = 0;
  35. $mid_pot['width'] = ($mid['ow'] - $mid['width']) / 2;
  36. }
  37.  
  38. $tb = imagecreatetruecolor ( $mid['ow'], $mid['oh'] );
  39. imagecopyresized ( $tb , $this->obrazek , $mid_pot['width'],
  40. $mid_pot['height'], 0, 0,
  41. $mid['width'], $mid['height'], $ow, $oh );
  42.  
  43. return $tb;
  44. }
  45. }
  46.  
  47. header("Content-type: image/jpeg");
  48.  
  49. $obiektObrazka = new Obrazek ( "img.jpg" );
  50. imagejpeg ( $obiektObrazka->resize (160, 90) );
  51. $obiektObrazka->__destruct();
  52. ?>
Go to the top of the page
+Quote Post
Bajki
post
Post #5





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


Cytat
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in C:\Program Files\WebServ\httpd\img\img.php on line 16
teraz takie cos (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
em1X
post
Post #6





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


wywal te public w kodzie dla wersji 4.x z linii 16.
Go to the top of the page
+Quote Post
Bajki
post
Post #7





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


ok super teraz działa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale jedna sprawa...ten obrazek wygląda strasznie brzydko...tzn. chodzi mi oto, ze wyglada tak jakbym wyświetlał oryginał ale z parametrami width i height w HTMLu...czyli jakosc jest o połowe gorsza niz wersjii większej...

nieda sie czegoś z tym zrobić ?

Ten post edytował Bajki 28.05.2008, 19:25:17
Go to the top of the page
+Quote Post
l0ud
post
Post #8





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


zamień imagecopyresized na imagecopyresampled w kodzie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Bajki
post
Post #9





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


ok super ! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) teraz juz wszystko jest jak należy.

Jednak teraz chciałbym wrócić do tego zapisywania...aby zapisać taki wygenerowany przez ten plik obraz musze skorzystać z odpowiednich funkcjii php - zapisać ten plik php jako nazwaobrazka.jpg ? czy istnieje jakiś sprytniejszy sposób... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
em1X
post
Post #10





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


jest sprytny sposób ale wymaga nauki czytania co nie wszyscy opanowali

manual -> http://pl.php.net/imagejpeg
Go to the top of the page
+Quote Post
l0ud
post
Post #11





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Jeżeli przekażesz drugi argument do funkcji imagejpeg(), to zapisze ona obrazek do pliku (ścieżka do pliku to właśnie ten argument) zamiast wysłania obrazka do przeglądarki:
  1. <?php
  2. //usunąłem header - nie jest już potrzebny- obrazek zapisze się, a nie wyświetli
  3.  
  4. $obiektObrazka = new Obrazek ( "img.jpg" );
  5. imagejpeg ( $obiektObrazka->resize (160, 90), 'sciezkaplikudozapisu.jpg');
  6. $obiektObrazka->__destruct();
  7. ?>


http://pl.php.net/manual/pl/function.imagejpeg.php
Go to the top of the page
+Quote Post
Bajki
post
Post #12





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


hehe no wlasnie udalo mi sie to odkryc chwile przed tym jak napisaliscie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

to juz prawie koniec problemow ale pozostalo jeszcze jedno...otoz w skrypcie ktory tworze mam okreslone rozmiary miniaturki, wersji sredniej oraz największej (pisze to, bo może to w czymś pomóc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) )

Niedokońca rozumiem działanie tego skryptu ale wygląa na to, żę nie ustala on określonej szerokości lub wysokości (w zależności od tego, co jest większe) miniatury tylko jakoś to tam inaczej sobie oblicza...i przez to miniatura wygląda tak, że mam czarny kwadrat a na nim wyśrodkowana miniatura (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) czy niedalo by sie zmodyfikować skryptu tak, aby miniatura była jakiejś określonej wielkości a obrazek wpasowany w nią ? (przez 'miniature' rozumiem to co generuje skrypt a przez 'obrazek' pomniejszoną wersje oryginalnej grafiki)

no dobra znalazłem ten topic :

http://forum.php.pl/index.php?showtopic=34169

i on powinien rozwiązać mój problem...coprawda wywala jakiś błąd ale skoro innym działa to mi też powinien ;P

pozdrawiam i dzięki za pomoc
Go to the top of the page
+Quote Post

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: 21.12.2025 - 10:42