Witaj, Gościu 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: (3)
porównanie bibliotek
Wtorek 22 Luty 2011 5:15:46 pm - siutek <siutek_at_gmail.com>

Bedzie moze jakis artykul w niedalekiej przyszlosci na temat biblioteki ImageMagic?? uzywam obecnie GD, ale slyszalem sporo opinii że IM jest szybsza. Chcialbym poznac wady i zalety obu.

problem z wykresem
Poniedziałek 03 Styczeń 2011 7:17:11 pm - kroolic

już sobie poradziłem, okazało się że gdy miałem w .htaccess ustawione php_value display_errors 1 , to wtedy pokazuje informacje

Obrazek "http://www.adreswww.pl/wykres.php" nie może zostać wyświetlony, ponieważ zawiera błędy.

ustawienie php_value display_errors 0 , pokazuje wykres, nigdy bym na to nie wpadł, przez przypadek na to trafiłem, pozdrawiam

Przykład 3. Generowanie wykresów w PHP
Poniedziałek 03 Styczeń 2011 5:01:00 pm - kroolic <kroolic_at_op.pl>

Kod i artykuł przejrzysty, tego szukałem, tylko jeden problem z artykułem "Przykład 3. Generowanie wykresów w PHP" - chodzi o to że autor nie podał jak ma wyglądać grafika użyta do wykresów i przeglądarka wyrzuca błąd

Obrazek "http://www.strona.pl/kod.php" nie może zostać wyświetlony, ponieważ zawiera błędy.


dziwny błąd, kod na żywca skopiowany z artykułu. Jeśli to możliwe proszę o uzupełnienie artykułu. Dziękuję.

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2017 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System