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!
















ShareThis