PHP: Skalowanie obrazków - biblioteka IMagick
Jakiś czas temu pisałem o skalowaniu obrazków za pomocą biblioteki GD. Nie jest to jednak najlepszy sposób. Obrazki są dość niskiej jakości, kod długi, a cały proces - zasobożerny. Już najwyższy czas aby przedstawić prostszy, szybszy i skuteczniejszy sposób skalowania obrazków.
Do wykonania miniaturki wykorzystamy tutaj bibliotekę IMagick, która jest doinstalowywana do PHP na praktycznie każdym płatnym serwerze.
Zacznę od tego, że wymienię kilka zalet korzystania z biblioteki IMagick. Po pierwsze, posiada ona dużo większy zestaw funkcji, który pozwala na znaczne skrócenie kodu. Kolejną zaletą jest zachowanie większej ilości szczegółów na miniaturce. W bibliotece GD użycie większej skali kończyło się kompletną nieczytelnością stworzonego obrazka. Tu jest dużo, dużo lepiej. Kolejną zaletą jest liczba obsługiwanych przez IMagick formatów i to, że nie potrzebujemy do każdego z nich osobnego zestawu funkcji.
Teraz, kiedy już wiesz dlaczego IMagick jest lepszym rozwiązaniem, zabierzmy się za listing:
<?php $path="http://kacperkolodziej.com/templates/default/images/logo.png"; //wymiary tego obrazka to: 240px na 136px $photo=new Imagick($path); $photo->ThumbnailImage(100,100,true); //skalujemy obrazek $new_path=$_SERVER['DOCUMENT_ROOT'] . "/images/mniejszy.png"; $photo->writeImage($new_path); //zapisujemy obrazek ?>
I to wszystko. Objaśnię więc ten krótki fragment kodu.
Najpierw definiujemy zmienną $path. Przechowuje ona adres obrazka, z którego będziemy korzystać. Następnie tworzymy obiekt imagick. Jako argument przyjmowany jest adres pliku. Teraz używamy funkcji Imagick::ThumbnailImage() do zmniejszenia obrazka. Pierwszy parametr to maksymalna szerokość miniaturki, drugi to maksymalna jej wysokość, a trzeci (typ boolean) mówi o tym, czy mają zostać zachowane proporcje (wartość true), czy też nie (wartość false). Ostatnią czynnością będzie zapisanie obrazka. Można nadpisać oryginał, ale lepiej jest zapisać go w innej lokalizacji. My wybraliśmy tę drugą opcję, więc definiujemy ścieżkę do zapisu obrazka (zmienna $new_path) i zapisujemy za pomocą funkcji Imagick::writeImage(), która za argument przyjmuje ścieżkę do zapisu pliku.
Tyle wystarczyło, żeby osiągnąć cel z lepszym efektem niż to było w przypadku biblioteki GD.
Pozostaje mi tylko życzyć owocnej pracy z biblioteką IMagick :)
Fajna sprawa, swego czasu miałem własną klasę właśnie na takie potrzeby. To jeszcze opisz jak doinstalować to u siebie na apache ;)
Rozszerzenie PHP Imagick dla Windows można zassać ze strony http://dev.freshsite.pl. Wersje Thread Safe i Non Thread Safe, kompilowane w VC6 i VC9. Czyli dla serwera każdego coś dobrego :-)
pozdrawiam
tk1
Dzięki! Tego właśnie szukałem :) Wszystko jasno opisane
no okej, wszystko pięknie ladnie tylko pytanie jak tego Imagick\\\\\\\\\\\\\\\'a na domowym hoście zainstalować? pobrałem całą paczkę(14MB) otwieram i wielkie zdziwienie co tam w ogole sie znajduje... nawet nie wiadomo za co sie zabrac bo plików tam jest od groma a jak przeczytalem to ta biblioteka jest juz na wiekszosci \\\\\\\"platnych serwerow\\\\\\\" właściwie zinstalowana i gotowa do użycia.
w razie chęci pomocy gdyby się ktos na to zdecydowal proszę o kontakt pod numerem Gadu-gadu: 9977031 lub ew. tutaj w komentarzu ;)
z gory serdecznie dziekuje,
pozdrawiam
Jeśli masz Linuxa z rodziny Debiana, to w konsoli wpisujesz:
- żadnej paczki wtedy nie potrzebujesz.W przypadku instalacji w Windows, najprawdopodbniej znajdziesz w paczce plik readme, install, todo czy jakiś podobny. Tam wszystko powinno być napisane.
Jak szerzej napiszesz co konkretnie masz, to ja też napiszę konkretniejszą poradę :)