MXStudio » PHP » Gráficos Parte 2

Gráficos Parte 2

Gráficos Parte 2

Bem, já sabendo o básico sobre como lidar com gráficos em PHP, surge a idéia de desenhar! Por que não? A biblioteca GD do PHP permite criar formas gráficas como linhas, ovais, retângulos e outras. Vamos ver agora como criar estas formas.

Pontos e linhas

Talvez a forma mais simples possível seja um ponto, um ponto é na verdade uma linha sem dimensões (começa e termina no mesmo lugar). A linha é portanto, no PHP, a forma mais simples possível, uma linha é criada pela função imageline(), que cria uma linha na imagem dos pontos x1 e y1 até os pontos x2, y2, da que determinada. A ordem dos parâmetros é a citada anteriormente (imagem, x1, y1, x2, y2, cor), nenhum destes parametros é opcional. Veja um exemplo:

<?php
// Crio uma imagem
$imagem = imagecreatetruecolor(180, 150) or die(‘GD não foi carregada!’);

// Determino algumas cores
$branco = imagecolorallocate($imagem, 255, 255, 255);
$vermelho = imagecolorallocate($imagem, 0xff, 0×0, 0×0);
$azul = imagecolorallocate($imagem, 0×20, 0×20, 0Xff);

// Garanto uma for para o fundo
imagefill($imagem, 0, 0, $branco);
// Desenho duas linhas que se cruzam
// Linha azul de (0, 0) até (180, 150)
imageline($imagem, 0, 0, 180, 150, $azul);
// Linha vermelha de (180, 0) até (150, 0)
imageline($imagem, 180, 0, 0, 150, $vermelho);

// Envia a imagem para o buffer de saída
header(‘Content-type: image/png’);
imagepng($imagem);
?>

Isto resultaria em:

Uma linha tem sempre um pixel de largura, para criar linhas mais larga, uma possibilidade é criar várias linhas, uma ao lado da outra.

Cículos e ovais

Para simplificar, os dois são basicamente a mesma coisa: um círculo é uma oval com a mesma medida na largura e na altura, portanto não há necessidade de tratamentos diferenciados. A função que cria uma oval (apenas a linha ou borda) é imageellipse(). O funcionamento é simples, ela cria uma forma oval de largura e altura pré-determinadas na cor desejada, sendo que o centro é um conjunto de coordenadas pré-estabelecido. A ordem dos parâmetros é: imagem, x do centro, y do centro, largura, altura e cor. Vale lembrar que a largura a altura são divididas em metade à esquerda e metade à direita do centro (no caso da largura) ou metade acima e metade abaixo (no caso da altura). Veja um exemplo:

<?php
$imagem = imagecreatetruecolor(180, 150) or die(‘GD não foi carregada!’);

$branco = imagecolorallocate($imagem, 255, 255, 255);
$vermelho = imagecolorallocate($imagem, 0xff, 0×0, 0×0);
$azul = imagecolorallocate($imagem, 0×20, 0×20, 0Xff);

imagefill($imagem, 0, 0, $branco);

// Cria as ovais com centro em (90, 75)
// Oval de largura 170 e altura 120 azul
imageellipse($imagem, 90, 75, 170, 120, $azul);
// Oval de largura 150 e altura 140 vermelha
imageellipse($imagem, 90, 75, 150, 140, $vermelho);

header(‘Content-type: image/gif’);
imagegif($imagem);
?>

Isso criaria a seguinte imagem:

Para criar uma oval prenchida usa-se a função imagefilledelipse() (o nome é difícil mesmo!), os parâmetros e a ordem deles é a mesmo, a diferença é que ao invés de criar uma borda para a tal elipse, um preenchimento é criado. A associação das duas funções criaria uma oval com borda e preenchimento. Veja ambos os exemplo:

<?php
$imagem = imagecreatetruecolor(180, 150) or die(‘GD não foi carregada!’);

$branco = imagecolorallocate($imagem, 255, 255, 255);
$verde = imagecolorallocate($imagem, 0×0, 0xaa, 0×0);
$amarelo = imagecolorallocate($imagem, 0xff, 0xff, 0×0);
$alaranjado = imagecolorallocate($imagem, 0xff, 0×99, 0X0);

imagefill($imagem, 0, 0, $branco);

// Cria uma oval preenchida de centro em (45, 50)
// Na cor alaranjada e com largura e altura de 85 pixels
imagefilledellipse($imagem, 45, 50, 85, 85, $alaranjado);

// Cria uma oval preenchida de centro em (135, 100)
// Na cor amarela e borda verde, com largura e altura de 85 pixels
imagefilledellipse($imagem, 135, 100, 85, 85, $amarelo);
imageellipse($imagem, 135, 100, 85, 85, $verde);

header(‘Content-type: image/gif’);
imagegif($imagem);
?>

Isto resultaria em:

Ratângulos e quadrados

Primeiramente: um quadrado É um retângulo (com mesma largura e altura). Desenhar retângulos é parecido com desenha linhas, você determina a posição de um dos cantos em x1 e y1 e a posição fina em x2 e y2. A função imagerectangle() desenha a borda de um retângulo e a função imagefilledrectangle() (outro nome difícil) permite criar o retângulo preenchido. A sintaxe imagerectangle() e imagefilledrectangle() é exatamente a mesma que imageline(), cada uma usado as informações de forma diferente (é claro!). Veja um exemplo:

<?php
$imagem = imagecreatetruecolor(180, 150) or die(‘GD não foi carregada!’);

$branco = imagecolorallocate($imagem, 255, 255, 255);
$roxo = imagecolorallocate($imagem, 0×99, 0×0, 0xff);
$rosa = imagecolorallocate($imagem, 0xff, 0×0, 0xff);
$preto = imagecolorallocate($imagem, 0×0, 0×0, 0×0);

imagefill($imagem, 0, 0, $branco);

// Desenha um retângulo de bordas roxas
imagerectangle($imagem, 2, 2, 176, 144, $roxo);

// Desenha um quadrado de bordas pretas e preenchido de rosa
imagefilledrectangle($imagem, 20, 5, 160, 140, $rosa);
imagerectangle($imagem, 20, 5, 160, 140, $preto);

header(‘Content-type: image/gif’);
imagegif($imagem);
?>

Veja o resultado:

Poligonos

As formas geométricas vão muito além de retângulos e ovais, a capacidade do PHP de desenhar formas também. É possível desenhar qualquer polígono através da função imagepolygon(), é uma função um pouco diferente das anteriores, seus arqumentos são a imagem, as coordenadas, o número de vértices e a cor. As coordenadas devem estar em um array de número de elementos par (um ponto é composta por duas coordenadas), o PHP irá considerar apenas o número de vértices informados, os demais pontos do array sao desconsiderados. Uma boa forma de se obter o total de vértices é dividir o total de coordenadas por 2 (dois) e arredondar para menos (com a função floor()).

Para criar um polígono preenchido, o método é semelhante aos anteriores, utiliza-se a função imagefilledpolygon(), sendo seus parâmetros os mesmos que imagepolygon(). Veja um exemplo, vou desenhar um hexágono:

<?php
$imagem = imagecreatetruecolor(120, 100);

$verde = imagecolorallocate($imagem, 0×66, 0xff, 0×0);
$cinza = imagecolorallocate($imagem, 0×99, 0×99, 0×99);

imagefill($imagem, 0, 0, $branco);

$hexagono = array(
10, 50, // Ponto mais a esquerda
35, 10, // Ponto superior esquerdo
85, 10, // Ponto superior direito
110, 50, // Ponto mais a direita
85, 90, // Ponto inferior direito
35, 90 // Ponto inferior esquerdo
);

// Crio o polígono preenchido (hexágono)
imagefilledpolygon($imagem, $hexagono, floor(count($hexagono) / 2), $verde);
// Crio as bordas do hexágono
imagepolygon($imagem, $hexagono, floor(count($hexagono) / 2), $cinza);

header(‘Content-type: image/gif’);
imagegif($imagem);
?>

Isto resultaria na seguinte imagem:

É bom comentar que o array dos pontos do polígono é formado por pares, o primeiro é o x e o segundo é o y do ponto, formando assim um par de coordenadas. O PHP segue as coordenadas na ordem que são dadas, de forma que se trocadas, a forma geométrica também mudará, veja o que acontece quando troco a ordem do ponto superior direito com a do ponto inferior esquerdo (10, 50, 35, 10, 35, 90, 110, 50, 85, 90, 85, 10):

Manipular a posição dos pontos pode também ser bastante útil para criar as mais diversas formas.

Bom, por enquanto é isso, até a próxima!


Assine o nosso Feed
1.404 assinantes,
assine você também!
Publique esse artigo no Twitter Salve este artigo no Delicious Cadastre esse artigo no Dihitt Cadastre esse artigo no UEBA Cadastre esse artigo no Rec6

Deixe um Comentario

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

Wanderson R Silva

Últimos Artigos do Autor