InnePHP

Generowanie miniaturek za pomocą przygotowanego skryptu PHP

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.

<?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.

<?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().

<?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ą.

<?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.

<?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.

<?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‚.

<?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ą.

<?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.

1 komentarz

  • Awatar
    Wojtek

    28 czerwca 2013 14:38

    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.

    Odpowiedz

Zostaw odpowiedź