Revista Do Linux  
EDIÇÃO DO MÊS
  Ambientes Gráficos
  Atualidade
  Capa
  Crusoe
  Desenvolvimento Web
  Divirta-se
  Entrevista
  Estudo de Caso
  Ferramentas
  Flagship
  Linha de Comando
  Segurança
  Tecnologia

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:

  1. Criar uma nova imagem
    $imagem=ImageCreate($largura, $altura);
  2. 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.

  3. 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);
  4. 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.

  5. 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)


Para saber mais:
 

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade