Gráficos em PHP
Como criar gráficos dinamicamente usando programação em PHP
Márcio Macedo
marciom@conectiva.com.br
De todas as facilidades que o PHP proporciona no desenvolvimento de um site ou de uma aplicação, sem dúvida
alguma a criação de ../imagens dinamicamente é um recurso dos mais poderosos, já que gráficos e figuras viabilizam a informação de
forma mais direta e amigável.
As aplicações são inúmeras
- Gráficos estatísticos gerados a partir de informações armazenadas em bancos de dados
- Gráficos estatísticos para monitorar o acesso a sites, ou o tráfego de uma rede
- Gráficos de pesquisas on-line
- Contadores
- Edição de ../imagens (inserir um texto fornecido pelo usuário em uma imagem, ou sobrepor duas imagens, por exemplo)
Como funciona a geração de ../imagens dinamicamente?
Basicamente, os parâmetros para a criação das novas ../imagens são passados às funções que criarão arquivos
de imagem (geralmente no formato GIF ou PNG). O PHP por si próprio possui apenas algumas funções que retornam o tamanho das
../imagens. Para manipular e criar imagens é necessário obter a biblioteca GD (GD library) disponível no pacote mod.html-gd-3.0.12-1cl
(Conectiva Linux 4.0) ou em www.boutell.com/gd.
Para os que instalaram o pacote rpm, basta incluir a linha extension=gd.so no arquivo.html.ini. Para os que
adquiriram a biblioteca, será necessário recompilar o PHP com suporte para GD, que é uma biblioteca gráfica. Ela permite escrever
programas que criam ../imagens completas contendo linhas, arcos, textos, cores múltiplas e preenchimento de cor.
O resultado pode ser gravado como um arquivo GIF ou PNG, que são formatos de ../imagens aceitos pela grande
maioria dos browsers. Neste artigo veremos dois exemplos:
- O primeiro (grafico1.html e grafico2.php3) cria uma imagem contendo uma linha, um retângulo, uma elipse e um texto a partir
das coordenadas e propriedades pedidas ao usuário.
- O segundo (vendas.html e grafvendas.php3) cria um gráfico do tipo pizza, a partir de um suposto relatório de vendas por
determinado vendedor.
Exemplo 1: grafico1.html: Formulário que recebe os valores das propriedades dos objetos.Veja figura 1.
Grafico2.html: cria a imagem e a página onde ela será mostrada. Veja figura 2.
Podemos resumir o processo para se criar uma nova imagem em etapas:
- Criar uma nova imagem
$imagem=ImageCreate($largura, $altura);
- Definir as cores a partir da combinação dos canais RGB:
ImageColorAllocate($imagem, $R, $G, $B);
Exemplo:
R |
G |
B |
Cor |
255 |
255 |
255 |
Branco |
0 |
0 |
0 |
Preto |
255 |
0 |
0 |
Vermelho |
0 |
255 |
0 |
Verde |
0 |
0 |
255 |
Azul |
Os valores variam entre 0 e 255. |
Pode-se definir as cores individualmente ou fazer diversas chamadas a esta função, alterando seus
parâmetros da forma desejada, para se construir uma paleta. Isso será mostrado na figura 1.
- Desenhar os objetos:
- linha: ImageLine($imagem, $x1, $y1, $x2, $y2, $cor);
- retângulo: ImageRectangle($imagem, $x1, $y1, $largura, $altura, $cor);
- arco/elipse: ImageArc($imagem, $x1, $y1, $largura, $altura, $ang_inicio, $ang_fim, $cor);
- texto: ImageString($imagem, $fonte, $x1, $y1, $texto, $cor);
- Definir um nome para a imagem:
ImageGif ($imagem, "../imagens/teste.gif");
Neste momento a imagem é gravada em disco. Note que o usuário deve ter permissão para escrita pelo
Apache (geralmente nobody ou httpd) no diretório onde a imagem será gravada.
- Liberar memória ocupada pela imagem:
ImageDestroy($imagem);
Para este exemplo, teríamos uma página semelhante à mostrada na figura 2.
Exemplo 2: vendas.html e grafvendas.php3. Relatório estatístico de vendas por vendedor
No exemplo 2 criamos uma pequena biblioteca com sete funções (funcoesgraficos.html). Nessa biblioteca
estão contidas as funções responsáveis pela criação do gráfico pizza.
A chamada a essa biblioteca está em grafvendas.html:
require ("funcoesgraficos.php3");
As informações sobre as vendas de cada vendedor estão armazenadas no vetor $vend_valor e os nomes de
cada vendedor estão no vetor $vend_nome.
Ainda são passados para a função o título do gráfico, o período do relatório e o nome do arquivo a ser
criado:
graficopizza("Grafico de Vendas/Vendedor", $vend_nome, $vend_valor, $arquivo, "$data1 - $data2");
A função se encarrega de receber os valores, somá-los e criar as fatias proporcionais das vendas de
cada vendedor, preenchidas com cores diferentes, criando uma legenda para cada fatia (veja figuras 3 e 4)