Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][Imagck] Zmiana rozdzielczości
sweter
post
Post #1





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


Witam, napisałem klasę do edycji obrazków bazującą na ImageMagick:
  1. class Application_Model_PhotoFile
  2. {
  3. private $path;
  4. private $image;
  5.  
  6. /**
  7. * Konstruktor jako arametr przyjmuje ścieżkę do pliku ze zdjęciem
  8. * @param (String) ścieżka
  9. * */
  10. public function __construct($path){
  11. $this->path = $path;
  12. $this->image = new Imagick($path);
  13. }
  14.  
  15. /**
  16. * Ogranicza obrazek do podanych w tablicy wymiarów
  17. * @param array('width', 'height')
  18. * */
  19. public function setMaxSize($param){
  20.  
  21. if(!isset($param['width']) && !isset($param['height'])){
  22. return null;
  23. }
  24.  
  25. $proporcje = array();
  26.  
  27. // obliczam proporcje
  28. if(isset($param['width'])){
  29. $proporcje['x'] = $param['width'] / $this->image->getImageWidth();
  30. }
  31. if(isset($param['heigh'])){
  32. $proporcje['y'] = $param['height'] / $this->image->getImageHeight();
  33. }
  34.  
  35.  
  36. // wyszukuję najmniejszą proporcję
  37. if(isset($param['width']) && isset($param['height'])){
  38. // podano wysokość i szerokość
  39. if($proporcje['x']>$proporcje['y']){
  40. $mnoznik = $proporcje['y'];
  41. }else{
  42. $mnoznik = $proporcje['x'];
  43. }
  44. }else{
  45. // podano wysokość lub szerokość
  46. if(isset($param['width'])){
  47. $mnoznik = $proporcje['x'];
  48. }else{
  49. $mnoznik = $proporcje['y'];
  50. }
  51. }
  52.  
  53. // czy docelowy rozmiar będzie mniejszy od obecnego (jeżeli <1 to tak)
  54. if($mnoznik<1){
  55. $nowa_szerokosc = floor($param['width'] * $mnoznik);
  56. $nowa_wysokosc = floor($param['height'] * $mnoznik);
  57. echo $nowa_szerokosc;
  58. $this->image->setResolution($nowa_szerokosc, $nowa_wysokosc);
  59. $this->image->writeImage('./img/c.jpg');
  60. }
  61.  
  62.  
  63.  
  64. }
  65. }

Wywołują ją w taki sposób:
  1. $photo = new Application_Model_PhotoFile('./img/a.jpg');
  2. $photo->setMaxSize(array('width'=>300));

Niestety rozdzielczość obrazka nie jest zmieniana sad.gif Czemu? Wydaje mi się, ze powyższy kod wygląda poprawnie.


--------------------
Go to the top of the page
+Quote Post
buliq
post
Post #2





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


  1. if(!isset($param['width']) && !isset($param['height'])){


Jeżeli nie podasz obydwóch parametrów to zwróci null, zamień na ||


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
sweter
post
Post #3





Grupa: Zarejestrowani
Postów: 623
Pomógł: 11
Dołączył: 1.01.2009
Skąd: Wrocław

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


@up
Tak właśnie ma działać smile.gif

Cały problem jest w tym, że tworzy mi się obrazek ./img/c.jpg, ale o takich samych wymiarach jak grafika domyślna


--------------------
Go to the top of the page
+Quote Post
buliq
post
Post #4





Grupa: Zarejestrowani
Postów: 559
Pomógł: 93
Dołączył: 4.03.2008
Skąd: Olsztyn

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


Ale zobacz, podajesz tylko jeden parametr tak? Więc przy pierwszym warunku już zwraca null bo podałeś tylko jeden parametr, natomiast cała metoda jest tak skonstruowana jakby oczekiwała jednego lub 2 parametrów.

Więc musisz sam odpowiedzieć czego chcesz.

Ten post edytował buliq 21.11.2011, 00:05:31


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
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 Aktualny czas: 19.08.2025 - 07:41