Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Imagck] Zmiana rozdzielczości
Forum PHP.pl > Forum > Przedszkole
sweter
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.
buliq
  1. if(!isset($param['width']) && !isset($param['height'])){


Jeżeli nie podasz obydwóch parametrów to zwróci null, zamień na ||
sweter
@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
buliq
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.
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.