torradeira.net



Milhares de dicas e tutoriais de informatica!

Flower

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:

  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.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:

Compartilhe:
  • Twitter
  • del.icio.us
  • Google Bookmarks
  • email
  • Live
  • Rec6
  • Print
  • StumbleUpon

Comente! Sua participação é importante.