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!

Escrito por Wanderson R Silva on outubro 22, 2008. Arquivado em PHP. Você pode seguir as respostas a esse artigo pelo RSS 2.0. Você pode deixar respostas para esse artigo

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>