This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!

Kilka dni temu trafiłem na pytanie o pomoc w przeskalowaniu obrazka do uploadu na pewnej stronie internetowej. Pomyślałem sobie: “kurczę, znowu ktoś nie umie takich podstawowych rzeczy”, aczkolwiek w opisanych wymaganiach znalazły się nie tylko informacje na temat docelowego rozmiaru, ale także rozdzielczości. Nauczony doświadczeniem zasugerowałem, żeby ten ostatni parametr zostawić w spokoju, ponieważ “i tak go nie sprawdzą”. W odpowiedzi dostałem jednak informację, że właśnie dlatego próby samodzielnej zmiany wymiarów nie przechodzą walidacji formularza. Stwierdziłem, że warto będzie zobaczyć, w jaki sposób można sprawdzić taki parametr na własną rękę.

Fotografia: kevindooley, CC-BY.

PHP: Sprawdzanie rozdzielczości pliku graficznego.

Pierwsze kroki skierowałem ku manualowi biblioteki GD, jako, że jest to najczęściej wykorzystywanej przeze mnie narzędzie do manipulacji obrazami w PHP. Niestety, co potwierdzają także źródła internetowe, GD nie posiada funkcji pozwalających na odczytanie rozdzielczości załadowanego pliku.

Trzeba było zatem poszukać czegoś innego. PHP nie należy do języków, które posiadają specjalnie bogaty wachlarz rozwiązań pozwalających na przetwarzanie obrazów, także jeśli nie GD, to zostaje właściwie tylko ImageMagick. Tylko i aż, ponieważ jest to chyba jedna z najbardziej rozpoznawalnych bibliotek tego typu.

ImageMagick udostępnia dwie “samodokumentujące się” metody:

Zobaczmy więc, jak wykorzystać je w praktyce.

Pobieranie rozdzielczości:

1
2
$image = new Imagick('image.png');
$resolution = $image->getImageResolution();

W zmiennej $resolution zostanie zapisana tablica z dwoma wartościami - rozdzielczością pionową i poziomą.

Ustawianie rozdzielczości:

1
2
$image = new Imagick('image.png');
$image->setImageResolution($resX, $resY);

Zmienne $resX i $resY określają rozdzielczość pionową i poziomą - należy podać odpowiednie liczby, ImageMagick zajmie się za nas resztą.

Tyle na dzisiaj, dziękuję za lekturę wpisu. Do zobaczenia w niedzielę. ;]