Niedawno przeprowadzałem testy jednostkowe swojej biblioteki do manipulacji obrazkami opartej na dwóch sterownikach GD / Imagick.
Sprawdzałem jak zachowa się klasa kiedy będziemy starać utworzyć się jej obiekt podając ścieżkę do pliku, który nie jest obrazkiem.
Jako testowy plik wybrałem sobie plik tekstowy *.txt, sterownik GD, rzucił mi prawidłowo wyjątek, natomiast sterownik Imagick przepuścił plik *.txt
Poniżej podaję przykład, jak używany jest Imagick:
try { $oImage = new \Imagick($this->sPath); } catch(\Exception $e) { throw new \Exception('File is not an image'); } if (!$oImage->valid()) { throw new \Exception('File is not an image'); } $aImage = $oImage->getImageGeometry(); $this->iWidth = (int)$aImage['width']; $this->iHeight = (int)$aImage['height'];
Po podaniu pliku tekstowego otrzymuję obiekt:
MyImagick Object ( [iWidth] => 612 [iHeight] => 792 )
What da ..? Ja rozumiem jeszcze jakoś przepuścić *.txt, ale jeszcze określić jego wymiary 612x792 ?
Chodzi mi o szybkie ustalenie czy plik jest poprawnym obrazkiem (za pomocą Imagick)
Nie chcę tutaj sprawdzać pierwszych bajtów pliku (magic numbers), ani żadnych dogłębnych analiz, bo od tego mam osobną klasę reguły walidacyjnej.
W sterowniku GD sprawdza się getimagesize, jednak w sterowniku Imagick go nie użyję bo to bez sensu i nie będę mieszać dwóch pakietów ze sobą.