# Aplicativos em PHP/Trabalhando em PHP com/Imagens e Gráficos
## Trabalhando com a biblioteca gráfica GD

(Se no Windows remover o ponto-e-vírgula ";" da linha "extension=php_gd.dll" do php.ini)

## Gerando Thumbnails com GD

Artigo do BOZO no PHPBrasil:
http://phpbrasil.com/articles/article.php/id/1350

## Gerando Imagens Dinamicamente

por Luiz Ribeiro
O PHP oferece uma interface ao módulo GD de Thomas Boutell. Usando tal módulo, você pode criar e editar imagens nos formatos JPEG e PNG. O formato GIF já foi aceito, mas como o algoritmo de compressão do GIF (LZW) contém uma patente de posse da Unisys, os desenvolvedores do módulo foram obrigados à retirar o suporte a esse formato nas versões mais recentes.
Bom, para iniciar vou explicar o procedimento para criar uma imagem usando o módulo GD em PHP. Se você não tem esse módulo, você pode fazer o download dele em http://www.boutell.com/gd/. Normalmente a GD acompanha uma instalação completa do PHP.
Para se criar a imagem, será usada a função ImageCreate, então serão realizadas as alterações na imagem, então será finalizada a imagem usando ImageJpeg, ImagePng ou até ImageGif se a versão do módulo GD for inferior à 1.4.
Bom, vamos ao que interessa. Primeiramente vamos criar uma pequena imagem com o seguinte texto: PHPBrasil. O código ficará da seguinte forma:
Bom, o script está todo comentado e acho que você entendeu. Se alguma dúvida ficar martelando aí, manda um comentário. =D
Bom, neste exemplo usamos a função ImageGif para converter a imagem, $imagem, e depoisa enviamos ao navegador. Mas poderíamos ter salvo esta imagem em um arquivo, ao invés de mostrar ela no navegador. Veja o exemplo:
Como você deve ter notado, apenas retiramos aquele header (que informava ao browser que o arquivo era uma imagem), afinal este exemplo não irá mostrar a imagem no navegador e sim gravar ela em $arquivo, e também mudamos os parâmetros da função ImageGif para salvar a imagem no arquivo.
Nesta parte do artigo, irei explicar como desenhar retângulos, polígonos e arcos.

## Desenhando retângulos

Vamos ao primeiro exemplo, que irá desenhar um simples retângulo preenchido usando GD (o formato da imagem a seguir é PNG).
Bom, neste exemplo só há uma função nova, a função ImageFilledRectangle que como seu próprio nome diz é uma função que cria um retângulo com as dimensões e posição informadas, e na cor azul, que foi definida na variável $azul.
Já para criar um retângulo sem preenchimento você simplesmente irá trocar a função ImageFilledRectangle por ImageRectangle. O exemplo ficará da seguinte forma:
Como foi dito, este exemplo irá criar uma imagem com um retângulo sem preenchimento, mas sua borda terá a cor $azul.

## Desenhando polígonos

Para desenhar polígonos, vamos usar a função ImagePolygon, que irá criar um polígono sem preenchimento, e a função ImageFilledPolygon que irá desenhar um polígono com preenchimento.
Em nosso primeiro exemplo, vamos desenhar um polígono com vértices de (12, 10), (15, 20), (50, 17) e (70, 10) com uma borda de azul-claro:
Bom, agora vamos criar um polígono preenchido, você já deve ter pensado que o código será o mesmo, mas ao invés de ImagePolygon usaremos ImageFilledPolygon, se você énsou isso, acertou em cheio. Vamos ver como ficaria nossa imagem com um retângulo preenchido:

## Desenhando arcos

Bom, agora vamos desenhar alguns arcos em nossas imagens, para isso vamos usar a função ImageArc. Antes de começarmos, vou passar a sintaxe da função:
int ImageArc(int im, int cx, int cy, int w, int h, int s, int e, int co1);
Esta função desenha um arco em uma imagem, im, com uma posição inicial de X de cx e uma posição inicial Y de cy. O arco é de largura w e altura h, com um ângulo inicial de s e um ângulo final de e, tudo na cor co1.
Agora que já entendemos a função ImageArc vamos ao nosso primeiro exemplo que irá desenhar uma elipse:
O código acima funciona, pois para ter uma elipse, você precisa de uma diferença de 360 graus entre a posição inicial e a posição final. Aplicando esse conhecimento, também podemos desenhar um círculo preenchido usando a função ImageFillToBorder. (Note que isso é um círculo, não uma elipse, porque os parâmetros de largura e altura têm o mesmo valor.)
Observação: os exemplos acima foram retirados do livro PHP: Guia do Desenvolvedor que está na lista de livros recomendados da PHPBrasil. Nos exemplos só foram alterados os nomes de algumas variáveis para facilitar a compreensão.
Bom, esse é o básico do módulo GD. Você com certeza tem muito a explorar ainda, em breve vou trazer mais alguns artigos sobre o assunto, para os que se interessaram, ou não entenderam alguma função podem ver no manual do PHP todas as funções de imagem: http://br.php.net/manual/pt_BR/ref.image.php

## Gerando Gráficos em PHP com a Biblioteca JPGraph
### O que é a JpGrapf?

A JpGraph é uma biblioteca orientada a objetos de criação de gráficos, inteiramente escrita em PHP, que tem como base a extensão GD2 ou GD1 que acompanha o PHP.
Pode ser utilizada para criar diversos tipos de gráficos, de maneira fácil e escrevendo um mínimo de código. Quando aliada a bancos de dados torna os gráficos ainda mais interessantes.

### Requisitos

Apache (http://httpd.apache.org )
PHP (www.php.net )
JpGraph (http://www.aditus.nu/jpgraph/ )

### Parâmetros de Compilação

- Compilar o PHP com suporte a GD e às fontes TTF (Linux):
Sugestão da documentação oficial da JpGrapf:
- No Windows basta descomentar no php.ini o suporte à GD2.
Obs.: No código de um gráfico não pode haver nenhuma saída em HTML ou texto.
Captura do site oficial.
Versões
Para PHP4 é indicada a versão 1.19 da JpGrapf e para a versão 5 do PHP é indicada a versão 2.0 beta.
Download das Fontes TTF (Linux)
http://corefonts.sourceforge.net/
http://www.gnome.org/fonts/
Como saber se o PHP já tem o suporte à JpGrapf?
Executar a função phpinfo, que deve retornar:
- GD support - enabled
- FreeTypeSupport – enabled
- JPG support – enabled
- PNG support – enabled
- WBMP support – enabled
Exemplos que podem ser encontrados no site official em
http://www.aditus.nu/jpgraph/pdf/jpgraphddda.pdf
Exemplos de Gráficos
Gráfico dos Poços perfurados pelo DNOCS de 1900 a 1999, por estado:
Este gráfico acessa um banco PostgreSQL. Num pequeno form alguém informa um ano entre 1900 e 1999 e recebe o gráfico correspondente. Caso não informe o ano retornará o gráfico de todos os anos.
Código abaixo:
Ao baixar a JpGraph e descompactar no diretório web, veja a documentação, que exibe inúmeros tipos de gráficos com seus respectivos códigos ao lado, como também o subdiretório samples que tem 337 exemplos de gráficos.

## Referência

http://www.phpbrasil.com/articles/print.php/id/164
http://www.zend.com/zend/tut/tutsweat3.php (ótimo tutorial, em inglês)
http://phpbrasil.com/articles/print.php/id/315 (outro muito bom e em português)
http://www.phpfreaks.com/print.php?cmd=tutorial&tut_id=115 (este abordando uso do MySQL)