Kod:
if (!is_readable($file))
{
return FALSE;
}
Wiemy już, że plik istnieje i mamy do niego dostęp. Teraz musimy pobrać rozmiar obrazka i zapisać go w zmiennych $old_x i $old_y.
Biblioteka GD2 udostępnia dwie funkcję służące do pobierania wymiarów obrazka – imageSX() i imageSY(). Jako argument należy im podać zasób RAW utworzony przy pomocy imagecreatefrom***().
Dla większej uniwersalności najlepiej jest wykrywać typ obrazka w sposób pokazany poniżej.
Kod:
$info = @getimagesize($file);
switch ($info[‘mime’])
{
case “image/gif”:
$file = imagecreatefromgif($file);
break;
case “image/jpeg”:
$file = imagecreatefromjpeg($file);
break;
case “image/png”:
$file = imagecreatefrompng($file);
break;
}
$old_x = imageSX($file);
$old_y = imageSY($file);
Aby zachować proporcje obrazu należy obliczyć wg nich nowe rozmiary. Na początku podajemy jaki obrazek byśmy chcieli – standardowa miniatura to 128×128. W przypadku podania zdjęcia 1024×768 zostaną wyliczone rozmiary 128×96. Poniższy kod nie wymaga chyba głębszego objaśnienia:
Kod:
$new_w = 128;
$new_h = 128;
if ($old_x > $old_y)
{
$thumb_w=$new_w;
$thumb_h=$old_y*($new_h/$old_x);
}
if ($old_x < $old_y) { $thumb_w=$old_x*($new_w/$old_y); $thumb_h=$new_h; } if ($old_x == $old_y) { $thumb_w=$new_w; $thumb_h=$new_h; } Teraz gdy już mamy rozmiary miniaturki możemy przystąpić do tworzenia miniaturki. Najpierw należy utworzyć pusty obrazek o rozmiarze miniaturki, w tym celu używamy funkcji ImageCreateTrueColor() Kod:
$th = ImageCreateTrueColor($thumb_w, $thumb_h);
Następnym krokiem będzie utworzenie właściwej miniaturki. Tutaj należy zwrócić uwagę na specyfikę działania GD2. Nie zapisuje ona plików tymczasowych, w związku z tym wymaga dużej ilości pamięci ponieważ cały obrazek w formie bitmapy musi zostać załadowany.
Maksymalny rozmiar obrazka nie może być większy niż pamięć dla php/3MB-1MB.
Kod:
imagecopyresampled($th, $file, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
Teraz nie pozostaje nam nic innego jak zapisać miniaturkę. W tym celu używamy funkcji imagejpeg()/imagegif()/imagepng() jak w przykładzie poniżej:
Kod:
imagejpeg($th, sciezka do zapisu/plik.jpg);
Ostatni krok jest opcjonalny choć polecany. Należy opróżnić bufor zwalniając pamięć.
W tym celu piszemy:
Kod:
@imagedestroy($file);
@imagedestroy($th);
Jeśli ktoś potrzebuje gotowej funkcji bez wgłębiania się w szczegóły jej działania może śmiało skopiować