O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Generowanie grafiki w PHP

Przykład 9. Generowanie listy obrazków

Czasem zdarza się, że potrzebne jest wygenerowanie obrazka z miniaturkami innych obrazków - można zrobić to w HTML wstawiając na przykład w tabelę poszczególne obrazki, można też stworzyć obrazek który wszystkie miniaturki będzie zawierał. Takie rozwiązanie może okazać się przydatne kiedy chcemy np. dać użytkownikowi możliwość szybkiego podglądu wszystkich obrazków z jego galerii w naszym serwisie. Do zalet takiego rozwiązania niewątpliwie zaliczyć można możliwość dowolnego manipulowania każdym nakładanym obrazkiem - przezroczystość, filtry, wymiary itd. Przyjmujemy następujące założenia:

  • Miniaturki mają jednakowe rozmiary
  • Szerokość miniatury obliczana jest na podstawie:
    • szerokości obrazka wynikowego
    • odstępów między miniaturami
    • ilości miniatur w wierszu
  • Wysokość miniatury stanowi 3/4 jej wysokości (stosunek 4:3)
  • Odstępy definiujemy jedynie między miniaturami tj. nie ma ich między miniaturami a brzegami obrazka wynikowego
  • Wysokość obrazka wynikowego ustalana jest na podstawie:
    • odstępów między miniaturami
    • wysokości miniatur
    • ilości miniatur

Zgodnie z założeniami napisałem skrypt który generuje taką listę miniatur. Komentarze mam nadzieję w zupełności wystarczą dla opisania działania kodu, w związku z czym jako takiego opisu nie będzie.

Listing 9. Generowanie listy obrazków

<?php
header('Content-Type: image/jpeg');
$width = 600; // szerokosc obrazka wynikowego
$odstep = 10; // odstep miedzy obrazkami
$na_linie = 4; // ilosc obrazkow w jednej linii]
 
$mini_width = round(($width-($odstep*($na_linie-1)))/$na_linie); // szerokosc miniaturki
$mini_height = round($mini_width * (3/4)); // wysokosc miniaturki (przyjmujemy stosunek 4:3)
 
$pliki = glob("fotografie/{*.jpg,*.jpeg}", GLOB_BRACE); // wskazanie katalogu z obrazkami
foreach ($pliki as $obrazek)
{
	$uchwyt = imagecreatefromjpeg($obrazek); // wczytanie obrazka
	
	$obrazki[$obrazek]['width'] = imagesx($uchwyt); // zapisanie wysokosci miniatury do tablicy
	$obrazki[$obrazek]['height'] = imagesy($uchwyt); // zapisanie szerokosi miniatury do tablicy
	$obrazki[$obrazek]['img'] = $uchwyt; // przypisanie obrazka do tablicy
}
 
$lini = ceil(count($obrazki)/$na_linie); // obliczenie ilosci wierszy
$height = ($mini_height*$lini)+($odstep*($lini-1)); // obliczenie wysokosci obrazka wynikowego
 
$wynik = imagecreatetruecolor($width, $height); // utworzenie obrazka wynikowego
$white = imagecolorallocate($wynik, 245, 245, 245); // nadanie koloru "bialego" - tla
 
imagefill($wynik, 0, 0, $white); // zamalowanie obrazka podanym kolorem
 
foreach ($obrazki as $img)
{
	imagecopyresampled($wynik, $img['img'], $i*($mini_width+$odstep), $top, 0, 0, $mini_width, $mini_height, $img['width'], $img['height']); // nalozenie miniatury na obrazek wynikowy
	$i++; // licznik miniaturek w wierszu
	if ($i == $na_linie) // jezeli nalozono na wiersz tyle obrazkow ile ustawiono
	{
		$top+=$mini_height+$odstep; // przechodzimy do kolejnego wiersza
		$i = 0; // zerujemy licznik miniaturek w wierszu
	}
}
 
imagejpeg($wynik, null, 100); // zwrocenie obrazka wynikowego
?>

Listing 9. Wynik działania kodu

Powielone na przykładzie obrazki to skutek istnienia dwóch kopii każdego z nich a nie błąd skryptu.
Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl    eZ systems    Newcomo   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2006 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System