Pracuję właśnie nad jednym, sporym projektem, który wymusił na mnie przygotowanie skryptu tworzącego miniaturkę zdjęcia. Pomijając cały proces analizy kodu HTML, w poszukiwaniu ścieżki do odpowiedniego pliku, cała sprawa zamykała się na odnalezieniu niezbyt skomplikowanej klasy PHP, odpowiedzialnej za kadrowanie zdjęć. Najbardziej do gustu przypadła mi ta o nazwie PHPThumb. Paczka do pobrania znajduje się po adresem www.phpthumb.gxdlabs.com – już teraz ściągnijmy ją sobie na dysk.
W pierwszej kolejności rozpakujmy archiwum z klasą PHP i przenieśmy jego zawartość do katalogu ’php’, utworzonym w folderze ’miniaturki’. Struktura plików na serwerze powinna wyglądać więc w ten sposób:
Utwórzmy teraz dokument index.php i zapiszmy go bezpośrednio w folderze ’miniaturki’. Na samym początku uzupełnijmy go następującą treścią, odpowiedzialną za wykonanie kodu z pliku ThumbLib.inc.php.
1 2 3 | <?php require_once 'php/ThumbLib.inc.php'; ?> |
Przyjmijmy też, że posiadamy plik graficzny o nieokreślonych z góry wymiarach. Wrzućmy go również do folderu ’miniaturki’.
W zmiennej $obrazek niech znajduje się ścieżka do wspomnianego pliku graficznego.
1 2 3 4 | <?php require_once 'php/ThumbLib.inc.php'; $obrazek = 'kurs.jpg'; ?> |
Jak wcześniej założyliśmy, nie znamy rozmiarów zdjęcia, a nasze miniaturki powinny mieć stały rozmiar 200×120[px], czyli ich kształt to prostokąt o szerokości większej niż wysokość.
Jak poznać rozmiary obrazka źródłowego? Skorzystajmy z funkcji getimagesize().
1 2 3 4 5 | <?php require_once 'php/ThumbLib.inc.php'; $obrazek = 'kurs.jpg'; $rozmiar = getimagesize($obrazek); ?> |
W tej chwili, w tablicy $rozmiar[], znajdują się wymiary zdjęcia, gdzie szerokość posiada identyfikator [0], a wysokość [1].
Do stworzenia miniaturki, przyda nam się współczynnik proporcji szerokości do wysokości. Pozwoli nam on określić kształt zdjęcia źródłowego. Wystarczy, że podzielimy jedną wartość przez drugą.
1 2 3 4 5 6 | <?php require_once 'php/ThumbLib.inc.php'; $obrazek = 'kurs.jpg'; $rozmiar = getimagesize($obrazek); $wspolczynnik = $rozmiar[0]/$rozmiar[1]; ?> |
Jeśli grafika ma kształt poziomy, współczynnik będzie posiadał wartość większą od 1. Jeśli jest odwrotnie, przyjmie liczbę mniejszą od 1. W przypadku, kiedy zdjęcie jest kwadratem, zmienna $wspolczynnik będzie równa 1.
Zapiszmy teraz instrukcję warunkową, która przeskaluje nam źródłową grafikę do optymalnych rozmiarów.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php require_once 'php/ThumbLib.inc.php'; $obrazek = 'kurs.jpg'; $rozmiar = getimagesize($obrazek); $wspolczynnik = $rozmiar[0]/$rozmiar[1]; if($wspolczynnik>1) { $h=120; $w=$h*$wspolczynnik; } if($wspolczynnik<=1) { $w=200; $h=$w/$wspolczynnik; } ?> |
W zmiennych $w i $h przechowywane są rozmiary zdjęcia, potrzebne do przeskalowania.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php require_once 'php/ThumbLib.inc.php'; $obrazek = 'kurs.jpg'; $rozmiar = getimagesize($obrazek); $wspolczynnik = $rozmiar[0]/$rozmiar[1]; if($wspolczynnik>1) { $h=120; $w=$h*$wspolczynnik; } if($wspolczynnik<=1) { $w=200; $h=$w/$wspolczynnik; } $thumb = PhpThumbFactory::create($obrazek); $thumb->resize($w, $h); ?> |
Na koniec pozostaje nam obcięcie nadmiaru wysokości (lub szerokości) i zapisanie miniaturki w innym katalogu, np. o nazwie ’thumbs’ – utwórzmy go sobie uprzednio wewnątrz folderu ’miniaturki’.
Skrypt obcina obrazek równo, po obu stronach i zapisuje go pod nazwą ’mini.jpg’.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php require_once 'php/ThumbLib.inc.php'; $obrazek = 'kurs.jpg'; $rozmiar = getimagesize($obrazek); $wspolczynnik = $rozmiar[0]/$rozmiar[1]; if($wspolczynnik>1) { $h=120; $w=$h*$wspolczynnik; } if($wspolczynnik<=1) { $w=200; $h=$w/$wspolczynnik; } $thumb = PhpThumbFactory::create($obrazek); $thumb->resize($w, $h); $thumb->cropFromCenter(200,120); $thumb->save('thumbs/mini.jpg'); ?> |
Zabezpieczmy się jeszcze przed wykonywaniem skryptu w przypadku, gdy miniaturka obrazka została już wcześniej utworzona i znajduje się na serwerze. Znowu wykorzystamy instrukcję warunkową.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php if (!file_exists('thumbs/mini.jpg')) { require_once 'php/ThumbLib.inc.php'; $obrazek = 'kurs.jpg'; $rozmiar = getimagesize($obrazek); $wspolczynnik = $rozmiar[0]/$rozmiar[1]; if($wspolczynnik>1) { $h=120; $w=$h*$wspolczynnik; } if($wspolczynnik<=1) { $w=200; $h=$w/$wspolczynnik; } $thumb = PhpThumbFactory::create($obrazek); $thumb->resize($w, $h); $thumb->cropFromCenter(200,120); $thumb->save('thumbs/mini.jpg'); } ?> |
Oto nasza oryginalna grafika >> Zobacz
I miniaturka wykonana powyższym skryptem >> Zobacz
Po uruchomieniu naszego skryptu, zdjęcie zostanie przeskalowane i wykadrowane do załozonych rozmiarów. Wykonanie proste ale za to dość funkcjonalne. Mam nadzieję, że komuś się przyda.
Thumb najlepiej zapisywać w jednym formacie np .png a jako żródło dostajemy różne pliki. jest jakaś opcja w funkcji ::create ?aby zawsze zapisywać np w png?. Kawał dobrej roboty. Dzięki za udostępnienie.