CompZone.Org :: Artykuły :: PHP
Która technologia najbardziej Cię interesuje?
PHP
ASP
AJAX
SQL
JavaScript
Inna
Sonda Wyniki

Add to Google

Generacja grafiki część II

Przed przystąpieniem do czytania tego zapraszam z zapoznaniem się z artykułem: "Generacja grafiki część I". Jest to zalecane jedynie użytkownikom, którzy nie są zapoznani z podstawowymi pojęciami i funkcjami, które są wykorzystane w generacji grafiki.

Artykuł ten, bowiem jak sama nazwa wskazuje jest rozszerzeniem poprzedniego. Dlatego też znajomość podstaw jest niezbędna.

A teraz przejdźmy do rzeczy. W poprzednim artykule pokazałem, w jaki sposób tworzyć obraz oraz jak wyświetlać go w przeglądarce, a następnie usunąć go z pamięci gdy już nie jest nam potrzebny. Należy jednak zauważyć, że PHP nie posiada funkcji, która pozwalałaby nam na narysowanie figury z zaokrąglonymi rogami, a która nie jest kołem. Dla tego celu stworzymy prostokąt właśnie z wyżej wymienionym detalem.

Aby to osiągnąć wykorzystamy znaną już nam funkcję ImageRectangle(), a także dodatkowego, określającego promień łuku rysowanego w wierzchołkach prostokąta. A zatem, prototyp naszej funkcji będzie miał następująca postać:

 <?php
//...
udImageRoundRect($obraz, $x1, $y1, $x2, $y2, $arcradius, $kolor);
//...
?>

Teraz odrobina wyjaśnień. Wartości argumentów $x1, $y1, $x2, $y2 nie zostaną użyte bezpośrednio jako współrzędne wierzchołków naszego prostokąta, lecz użyjemy ich do obliczenia współrzędnych środków rysowanych łuków oraz punktów początku i końca boków prostokąta. Środek łuku możemy obliczyć, dodając wartość argumentu $arcradius do argumentów $x1 oraz $y1. Co jest bardzo ważne. Dodawać będziemy tylko w przypadku lewego górnego rogu. W pozostałych będzie to odejmowanie!

Zaczynamy: funkcja udImageRoudRect()

Zaczniemy od zdefiniowania naszej funkcji w pliku plik.inc:

 <?php
function udImageRoundRect($obraz, $x1, $y1, $x2, $y2, $arcradius, $kolor)
{
$arcwidth = ($arcradius * 2);
// lewy góry róg
ImageArc($obraz, $x1 + $arcradius, $y1+$arcradius,
$arcwidth, $arcwidth,
180, 270, $kolor);
// prawy górny róg
ImageArc($obraz, $x2 - $arcradius, $y1+$arcradius,
$arcwidth, $arcwidth,
270, 360, $kolor);
// prawy dolny róg
ImageArc($obraz, $x2 - $arcradius, $y2 -$arcradius,
$arcwidth, $arcwidth,
0, 90, $kolor);
// lewy dolny róg
ImageArc($obraz, $x1+$arcradius, $y2-$arcradius,
$arcwidth, $arcwidth,
90, 180, $kolor);
// górna krawędź
ImageLine($obraz, $x1+$arcradius, $y1,
$x2-$arcradius, $y1, $kolor);
//prawa krawędź
ImageLine($obraz, $x2, $y1+$arcradius,
$x2, $y2-$arcradius, $kolor);
// dolna krawedz
ImageLine($obraz, $x1+$arcradius, $y2,
$x2-$arcradius, $y2, $kolor);
// lewa krawędź
ImageLine($obraz, $x1, $y1+$arcradius,
$x1, $y2-$arcradius, $kolor);
}
?>

Odrobina wyjaśnień: najpierw mnożymy wartość argumentu $arcradius razy 2. Pozwala nam to na określenie szerokości naszego łuku. Tą z kolei możemy bezpośrednio wykorzystać w funkcji ImageArc(). Kolejny wiersz kodu rysuje nasz łuk lewego górnego wierzchołka. Pamiętajmy, że wysokość i szerokość łuku są sobie równe i mają wartość równą $arcradius. Jest to istotne, ponieważ pozwala to nam na stworzenie wierzchołka zaokrąglonego, a nie o kształcie elipsy. Dalej. Aby narysować poprawnie prawy wierzchołek używamy wartość $x2 od której odejmujemy wartość $arcradius. Każdy następny dolny wierzchołek naszego prostokąta rysujemy w ten sposób, jednak pamiętać musimy o tym, czy wartości dodajemy czy odejmujemy oraz których współrzędnych x i y należy wykorzystać.

Ostatni fragment jak widać służy do połączeni naszych wierzchołków za pomocą lini. Jedyna trudność na jaką się tu napotykamy to punkty połączenia wierzchołków. Gdyby wierzchołki nie były zaokrąglone wystarczyłoby połączyć linie we współrzędnych x i y. W tym przypadku jednak musimy zmodyfikować te punkty o wartość $arcradius.

RoudRect.php

Teraz najprostsza część. Piszemy następujący skrypt *.php który pozwoli nam na wyświetlenie naszego dzieła w oknie przeglądarki.

 <?php
include("plik.inc");
Header("Content-Type: image/jpeg");
$obraz = ImageCreate(200, 150);
$szary = ImageColorAllocate($obraz, 204, 204, 204);
$niebieski = ImageColorAllocate($obraz, 0, 0, 255);
udImageRoudRect($obraz, 10, 10, 190, 140, 30, $niebieski);
ImageJPEG($obraz);
ImageDestroy($obraz);
?>

Zakończenie

Jeżeli w skrypcie *.php odpowiedzialnym za wyświetlnie prostokąta jest coś niejasnego zalecam odniesienie się do poprzedniego artykułu z tej serii "Generacja grafiki część I". Są tam opisane wszelkie podstawy dzięki którym skrypt ten będzie zupełnie jasny.

Fixus @ 11-07-2006 20:16
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!