Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> getimagesize() i avatary, skrypt zwalnia
MatheW
post 10.08.2006, 21:35:42
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 29.05.2006
Skąd: Lublin

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


Udostępniam uzytkownikom możliwość avatarów - można wysłać na serwer lub wpisać adres obrazka z sieci. I z tą drugą metodą mam problem. Podczas zapisania adresu obrazka robie getimagesize() i sprawdzam jego rozmiary. Jednak jest możliwość, ze w przyszłości uzytkownik zmieni ten obrazek na jakiś duży (tj. uploaduje na jego miejsce duży obrazek o tej samej nazwie, a więc dalej do niego się odnosi wpis w bazie). Chciałem więc przy każdym wyświetleniu ava sprawdzić rozmiary tego obrazka, i gdy jest on za duży to go po prostu nie wyświetlić. Jednak skrypt strasznie zwalnia - przy jednym obrazku wykonuje sie 3,4 sekundy!

Czy ma ktoś pomysł jak inaczej rozwikłać ten problem? Czy to normalne, że ta funkcja tak obciąża serwer? Jakie wy stosujecie sposoby na avatary?

Ten post edytował MatheW 10.08.2006, 21:42:56


--------------------
[gg:8166107][jid:mmatheww@jabberpl.org][mail:mat.wojcik[at]gmail.com][www: http://mwojcik.pl]
Go to the top of the page
+Quote Post
Ludvik
post 10.08.2006, 21:46:04
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Takie rozwiązanie nie ma sensu. Po pierwsze pobierasz ten obrazek do skryptu php. Odwiedzający musi go ponownie pobrać. Kilkusekundowe opóźnienie, to czas żądania pobrania obrazka, a nie funkcji getimagesize.

Najlepiej pobrać ten obrazek na serwer i zapisać. To rozwiązanie eliminuje dynamiczne awatary - takie jak ma np. kszychu. Myślę, że rozsądnie by było kazać podać (albo jednorazowo pobrać) rozmiar obrazka przy podawaniu adresu i narzucić go w kodzie html/css.

Nie wiem jak to działa na tym forum...


--------------------
Go to the top of the page
+Quote Post
MatheW
post 11.08.2006, 07:51:12
Post #3





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 29.05.2006
Skąd: Lublin

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


Właśnie tak sie zastanawiałem jak to działa na forach.. Czy może ktoś posiada taką wiedzę, lub sam wykonywał podobny system avatarów?


--------------------
[gg:8166107][jid:mmatheww@jabberpl.org][mail:mat.wojcik[at]gmail.com][www: http://mwojcik.pl]
Go to the top of the page
+Quote Post
thornag
post 12.08.2006, 11:19:27
Post #4





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Nie latwiej ten obrazek zeskalowac ?

  1. <?php
  2.  
  3. $filename = $_REQUEST['image'];
  4. $max_width = $_REQUEST['max_width'];
  5. $max_height = $_REQUEST['max_height'];
  6. if (!$max_width)
  7. $max_width = 150;
  8. if (!$max_height)
  9. $max_height = 150;
  10. $size = GetImageSize($filename);
  11. $width = $size[0];
  12. $height = $size[1];
  13.  
  14.  
  15. header('Content-type: '.$size['mime']);
  16.  
  17.  
  18.  
  19.  
  20. $x_ratio = $max_width / $width;
  21. $y_ratio = $max_height / $height;
  22.  
  23. if ( ($width <= $max_width) && ($height <= $max_height) ) {
  24. $newwidth = $width;
  25. $newheight = $height;
  26. }
  27. elseif (($x_ratio * $height) < $max_height) {
  28. $newheight = ceil($x_ratio * $height);
  29. $newwidth = $max_width;
  30. }
  31. else {
  32. $newwidth = ceil($y_ratio * $width);
  33. $newheight = $max_height;
  34. }
  35.  
  36.  
  37. $thumb = imagecreatetruecolor($newwidth, $newheight);
  38. switch($size['mime']) {
  39. case "image/gif":
  40. $source = imagecreatefromgif($filename);
  41. imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  42. imagegif($thumb);
  43. break;
  44.  
  45.  
  46. case "image/jpg":
  47. case "image/pjpeg":
  48. case "image/jpeg":
  49.  
  50. $source = imagecreatefromjpeg($filename);
  51. imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  52. imagejpeg($thumb);
  53. break;
  54. case "image/pjpeg":
  55. $source = imagecreatefromjpeg($filename);
  56. imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  57. imagejpeg($thumb);
  58. break;
  59. case "image/png":
  60. $source = imagecreatefrompng($filename);
  61. imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  62. imagejpng($thumb);
  63. break;
  64.  
  65. }
  66.  
  67.  
  68.  
  69. ?>


Wywolanie

  1. <img src="image.php?image=urlencode(sciezka do obrazka)&max_height=ilechcesz&max_width=ilechcesz">


Gdzie image.php to ten plik powyzej.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
legorek
post 12.08.2006, 12:49:57
Post #5





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Thornag, miodny sposób, żeby zajechac serwer.

Tak jak już ktoś wspomniał, lepiej ściągac obrazki do siebie.


--------------------
Go to the top of the page
+Quote Post
Coyote
post 12.08.2006, 13:14:16
Post #6





Grupa: Zarejestrowani
Postów: 151
Pomógł: 0
Dołączył: 20.02.2005
Skąd: Poznań

Ostrzeżenie: (30%)
XX---


tia wedlug mnie tez lepiej pobrac obrazek do siebie na serv ... mniejsze obciazenie serva i wogole ... i nie bedzie myku z "podmienionym avatarem o tej samej nazwie" snitch.gif


Pozdrawiam Coyote


--------------------
Go to the top of the page
+Quote Post
thornag
post 12.08.2006, 18:31:50
Post #7





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Ja w ten sposob wyswietlam za kazdym razem. Nie ma ich za wiele, pozatym serwer mam dedykowany tongue.gif

A obrazek po zresizowaniu zawsze mozna zapisac na serwer a stary usunac.

Ten post edytował thornag 12.08.2006, 18:32:33


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

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: 19.07.2025 - 09:54