Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: skalowanie pliku graficznego przy zapisie na serwer
Forum PHP.pl > Forum > PHP
pikornecki
Witam, chciałbym zrobić galerię zdjęć, w której w momencie uploadu plików przez użytkownika na serwer od razu zostaną przeskalowane do konkretnego wymiaru, jeszcze przed ich zapisem. Czy jest jakaś funkcja, która to realizuje?
Smertius
Tak jest taka funkcja wink.gif


Zainteresuj się http://php.net/manual/en/book.image.php
Kazaan
gotowe rozwiazanie i wedlog mnie najlepsze:

  1. class SimpleImage {
  2.  
  3. var $image;
  4. var $image_type;
  5.  
  6. function load($filename) {
  7. $image_info = getimagesize($filename);
  8. $this->image_type = $image_info[2];
  9. if( $this->image_type == IMAGETYPE_JPEG ) {
  10. $this->image = imagecreatefromjpeg($filename);
  11. } elseif( $this->image_type == IMAGETYPE_GIF ) {
  12. $this->image = imagecreatefromgif($filename);
  13. } elseif( $this->image_type == IMAGETYPE_PNG ) {
  14. $this->image = imagecreatefrompng($filename);
  15. }
  16. }
  17. function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
  18. if( $image_type == IMAGETYPE_JPEG ) {
  19. imagejpeg($this->image,$filename,$compression);
  20. } elseif( $image_type == IMAGETYPE_GIF ) {
  21. imagegif($this->image,$filename);
  22. } elseif( $image_type == IMAGETYPE_PNG ) {
  23. imagepng($this->image,$filename);
  24. }
  25. if( $permissions != null) {
  26. chmod($filename,$permissions);
  27. }
  28. }
  29. function output($image_type=IMAGETYPE_JPEG) {
  30. if( $image_type == IMAGETYPE_JPEG ) {
  31. imagejpeg($this->image);
  32. } elseif( $image_type == IMAGETYPE_GIF ) {
  33. imagegif($this->image);
  34. } elseif( $image_type == IMAGETYPE_PNG ) {
  35. imagepng($this->image);
  36. }
  37. }
  38. function getWidth() {
  39. return imagesx($this->image);
  40. }
  41. function getHeight() {
  42. return imagesy($this->image);
  43. }
  44. function resizeToHeight($height) {
  45. $ratio = $height / $this->getHeight();
  46. $width = $this->getWidth() * $ratio;
  47. $this->resize($width,$height);
  48. }
  49. function resizeToWidth($width) {
  50. $ratio = $width / $this->getWidth();
  51. $height = $this->getheight() * $ratio;
  52. $this->resize($width,$height);
  53. }
  54. function scale($scale) {
  55. $width = $this->getWidth() * $scale/100;
  56. $height = $this->getheight() * $scale/100;
  57. $this->resize($width,$height);
  58. }
  59. function resize($width,$height) {
  60. $new_image = imagecreatetruecolor($width, $height);
  61. imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  62. $this->image = $new_image;
  63. }
  64. }


przykladowe uzycie:

  1. $image = new SimpleImage();
  2. $image->load('plik_do_resize');
  3. $image->resizeToWidth(200);
  4. $image->save('nazwa_pliku.jpg');
poisonersmainds
A nie lepiej w momencie osadzania zdjęcia na stronie/galerii skalować go za pomocą CSS??

Możesz wtedy zeskalować do postaci miniatury oraz dużego zdjęcia.
mat-bi
Nie sądzę, żeby było lepiej. Tracisz wtedy transfer, bo i tak przeglądarka wczytuje cały obraz, strona może też sie wolno ładować.

Co do autora, zainteresuj się biblioteką GD/ImageMagick
kadlub
Cytat(mat-bi @ 8.05.2011, 12:57:58 ) *
Nie sądzę, żeby było lepiej. Tracisz wtedy transfer, bo i tak przeglądarka wczytuje cały obraz, strona może też sie wolno ładować.

Co do autora, zainteresuj się biblioteką GD/ImageMagick

zgadza się jak by użytkownik wszedł na taką stronę gdzie ma kilka naście takich miniaturek to by sie naczekał na ich załadowanie i mogę się założyć że by stracił cierpliwość i nie czekał
woytecki
Ja korzystam z klasy PhpThumb i bardzo sobie chwalę:
http://phpthumb.sourceforge.net
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.