Gráficos em PHP
5,985 acessos
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_php3-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 php3.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.php3 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.php3 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.php3: Formulário que recebe os valores das propriedades dos objetos.Veja figura 1.Grafico2.php3: 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.php3 e grafvendas.php3. Relatório estatístico de vendas por vendedor
No exemplo 2 criamos uma pequena biblioteca com sete funções (funcoesgraficos.php3). 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.php3:
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)
Para saber mais:
- Informações e download da biblioteca GD:
www.boutell.com/gd - Parte do manual do php com a lista de funções relativas a manipulação de imagens:
www.php.net/manual/html/ref.image.html