Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Generowanie grafiki w PHP

Przykład 4: Ciekawe efekty graficzne

GD pozwala nam manipulować każdym pikselem obrazka, co daje nam możliwości niemal nieograniczone jeśli chodzi o efekty. Tym razem napiszemy funkcję która nałoży na znany nam już obrazek efektowną ramkę.

Na początku przygotowałem funkcję która pozwoli nam manipulować kolorami, jest ona niezwykle prosta:

function change_color($color)
{
 if ($color >= 255)
  return 255;
 elseif ($color <= 0)
  return 0;
 else
  return $color;
}

Funkcja ta przyjmuje jeden argument: $color a następnie sprawdza czy jego wartość mieści się w przedziale 0-255. Jeżeli tak zwraca go, jeżeli nie zwraca 0 lub 255 jako że są to wartości odpowiednio najmniejsza i największa możliwe do zastosowania. Przyjrzyjmy się teraz właściwej funkcji:

Listing 4. Nakładanie efektownej ramki na obrazek

function ramka($img, $odl, $dist, $r, $g, $b)
{
 $img_x = imagesx($img);
 $img_y = imagesy($img);

 for ($x = $odl; $x <= $img_x - $odl; $x++)
  {
  for ($y = $odl; $y <= $img_y - $odl; $y++)
  {
   if ($x < $odl + $dist || $x > $img_x - ($odl + $dist) || $y < $odl + $dist || $y > $img_y - ($odl + $dist))
   {
    $pixelrgb = imagecolorat($img, $x, $y);
    $cols = imagecolorsforindex($img, $pixelrgb);

    $red  = change_color($cols['red'] + $r);
    $green = change_color($cols['green'] + $g);
    $blue = change_color($cols['blue'] + $b);

    $color = imagecolorallocate($img, $red, $green, $blue);
    imagesetpixel($img, $x, $y, $color);
   }
  }
 }
}

Listing 4. Omówienie kodu

W przypadku funkcji ramka() opiszę już sposób jej działania krok po kroku, przed tym jednak opiszę działanie poszczególnych funkcji, których do tej pory nie używaliśmy.

imagecolorat()

Zwraca tablicę zawierającą składowe koloru na który wskazuje podany w parametrze indeks. Przyjmuje tylko dwa parametry:

  • $image uchwyt obrazka
  • $index index koloru
imagesetpixel()

Nadaje kolor pojedynczemu pikselowi wskazanemu przez parametry $x i $y. Parametry:

  • $image uchwyt obrazka
  • $x współrzędna x piksela
  • $y współrzędna y piksela
  • $color kolor (patrz: imagecolorallocate())

Przejdźmy do opisu funkcji, przedstawię go w postaci czytelnej listy kroków.

  1. Funkcja przyjmuje parametry definiujące sposób generowania nowego obrazka, a w zasadzie ramki na już istniejącym.
  2. Do zmiennych pomocniczych $img_x i $img_y przypisujemy wymiary obrazka.
  3. Przechodzimy przez obrazek piksel po pikselu od lewej do prawej i tak coraz niżej aż do końca.
  4. Przy pomocy konstrukcji if() sprawdzamy czy piksel nad którym obecnie pracujemy mieści się w zdefiniowanym przedziale. Służą nam do tego dwa parametry przekazane do funkcji:
    • $odl - zmienna określająca odległość ramki od krawędzi obrazka
    • $dist - zmienna określająca "grubość" ramki
    Kolejne kroki wykonywane będą tylko w sytuacji, kiedy piksel nad którym pracujemy należy do ramki
  5. Przy pomocy funkcji imagecolorat() i imagecolorsforindex() pobieramy składowe (czerwony, zielony, niebieski) koloru bieżącego piksela.
  6. Przy pomocy przygotowanej wcześniej funkcji change_color() definiujemy nowe składowe dla koloru danego piksela zmieniając je w sposób w jaki nakazują to zrobić zmienne $r, $g i $b przekazane jako parametry funkcji.
  7. Nadajemy pikselowi kolor o ustalonym przy użyciu funkcji imagecolorallocate() indeksie.

Funkcję wywołujemy w sposób przedstawiony niżej:

<?php
header('Content-Type: image/jpeg');
$img = imagecreatefromjpeg('zdjecie.jpg');
ramka($img, 40, 15, -60, -50, -60);
imagejpeg($img, null, 100); ?>

Listing 4. Wynik działania kodu

ramka($img, 40, 15, -60, -50, -60)
ramka($img, 0, 55, -60, -50, -60);
ramka($img, 0, 20, -60, -50, -60)
ramka($img, 30, 10, -60, -50, -60)
ramka($img, 50, 5, -60, -50, -60)
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