Gerando Imagens Dinamicamente
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:
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
Abraços,
Luiz Gustavo Cardoso Ribeiro
Desenhando retângulos
Vamos ao primeiro exemplo, que irá desenhar um simples retângulo preenchido usando GD (o formato da imagem a seguir é PNG).
<?php header("Content-type: image/png"); $imagem = ImageCreate(100, 20); $branco = ImageColorAllocate($imagem, 255, 255, 255); $azul = ImageColorAllocate($imagem, 20, 93, 233); ImageFilledRectangle($imagem, 5, 10, 60, 14, $azul); ImagePng($imagem); ImageDestroy($imagem); ?>
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:
<?php header("Content-type: image/png"); $imagem = ImageCreate(100, 20); $branco = ImageColorAllocate($imagem, 255, 255, 255); $azul = ImageColorAllocate($imagem, 20, 93, 233); ImageRectangle($imagem, 5, 10, 60, 14, $azul); ImagePng($imagem); ImageDestroy($imagem); ?>
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:
<?php header("Content-type: image/png"); $imagem = ImageCreate(100, 20); $branco = ImageColorAllocate($imagem, 255, 255, 255); $azul = ImageColorAllocate($imagem, 20, 93, 233); $pontos = array(12, 10, 15, 20, 50, 17, 70, 10); ImagePolygon($imagem, $pontos, 4, $azul); ImagePng($imagem); ImageDestroy($imagem); ?>
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:
<?php header("Content-type: image/png"); $imagem = ImageCreate(100, 20); $branco = ImageColorAllocate($imagem, 255, 255, 255); $azul = ImageColorAllocate($imagem, 20, 93, 233); $pontos = array(12, 10, 15, 20, 50, 17, 70, 10); ImageFilledPolygon($imagem, $pontos, 4, $azul); ImagePng($imagem); ImageDestroy($imagem); ?>
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:
<?php header("Content-type: image/gif"); $imagem = ImageCreate(500, 100); $branco = ImageColorAllocate($imagem, 255, 255, 255); ImageColorTransparent($imagem, $branco); $vermelho = ImageColorAllocate($imagem, 20, 93, 233); ImageArc($imagem, 40, 50, 50, 40, 0, 360, $vermelho); ImageGif($imagem); ImageDestroy($imagem); ?>
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.)
<?php header("Content-type: image/gif"); $imagem = ImageCreate(500, 100); $branco = ImageColorAllocate($imagem, 255, 255, 255); ImageColorTransparent($imagem, $branco); $vermelho = ImageColorAllocate($imagem, 20, 93, 233); ImageArc($imagem, 40, 50, 50, 50, 0, 360, $vermelho); ImageFillToBorder($imagem, 50, 40, $vermelho ImageGif($imagem); ImageDestroy($imagem); ?>
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
Abraços,
Luiz Gustavo Cardoso Ribeiro
Páginas:
1
2
Tentem usar a função imagejpeg() ao invés de ImageGif() e utilize a DLL php_gd2.dll ! acho q dae funciona!
06/03/2005 5:41pm
(~20 anos atrás)
Gente
php.ini
extension_dir = D:\PHP\extensions (existe esse diretório e descompactei o gd nele juntamente com a php_gd.dll)
deletei o ; da linha extension=php_gd.dll
qdo mando rodar
Content-type: text/html X-Powered-By: PHP/4.3.1 PHP Warning: Unknown(): Unable to load dynamic library 'D:\PHP\extensions\php_gd.dll' - Não foi possível encontrar o procedimento especificado. in Unknown on line 0
alguem pode me ajudar
php.ini
extension_dir = D:\PHP\extensions (existe esse diretório e descompactei o gd nele juntamente com a php_gd.dll)
deletei o ; da linha extension=php_gd.dll
qdo mando rodar
Content-type: text/html X-Powered-By: PHP/4.3.1 PHP Warning: Unknown(): Unable to load dynamic library 'D:\PHP\extensions\php_gd.dll' - Não foi possível encontrar o procedimento especificado. in Unknown on line 0
alguem pode me ajudar
19/02/2004 7:49am
(~21 anos atrás)
Cara, eu configurei tudo e tal.... Mas em que pasta exatamente eu colo os arquivos do .zip? Coloquei na pasta c:\php\gd, configurei no php.ini e mesmo assim ta dando erro...
28/02/2003 3:23pm
(~22 anos atrás)
Apesar do link ser pro Manual em português, está escrito em inglês.
http://www.php.net/manual/pt_BR/ref.image.php
http://www.php.net/manual/pt_BR/ref.image.php
30/10/2002 8:53am
(~22 anos atrás)
Simplesmente coloque o php_gd.dll no extension_dir (que está definido em seu php.ini).
Abraços,
Luiz Gustavo Cardoso Ribeiro
Abraços,
Luiz Gustavo Cardoso Ribeiro
19/05/2002 4:55pm
(~22 anos atrás)
Eu sei que tem que tirar o ; da extension=php_gd.dll
Até ai não tem drama e depois onde eu descompacto o gd-1.8.4.zip? em que pasta??
Valeu.
Até ai não tem drama e depois onde eu descompacto o gd-1.8.4.zip? em que pasta??
Valeu.
18/05/2002 7:58pm
(~22 anos atrás)
Seguinte cara,
Você esqueceu de definir a extensão usando:
extension=php_gd.dll
Ele simplesmente não encontra a função pois você apenas colocou a dll no dir, você precisa informar ao php que é para ele usar a extensão da gd.
Peço desculpas novamente por ter me esquecido de falar isso em meus primeiros comentários...
Abraços,
Luiz Gustavo Cardoso Ribeiro
Você esqueceu de definir a extensão usando:
extension=php_gd.dll
Ele simplesmente não encontra a função pois você apenas colocou a dll no dir, você precisa informar ao php que é para ele usar a extensão da gd.
Peço desculpas novamente por ter me esquecido de falar isso em meus primeiros comentários...
Abraços,
Luiz Gustavo Cardoso Ribeiro
24/04/2002 9:11pm
(~23 anos atrás)
Rafael, eu acho que tem, é só você colocar o arquivo php_gd.dll no diretório onde estão suas extensões do php (que está definido em seu php.ini).
E tem uma outra coisa que eu esqueci de citar anteriormente, além de você colocar a extensão no diretório, você deve incluir a extensão em seu php.ini da seguinte forma:
extension=php_gd.dll
Você provavelmente tem essa linha em seu php.ini já, mas comentada, se não tiver, é só adicionar ela...
Se você não souber qual o seu diretório de extensões do PHP, você pode ver em seu php.ini isso, por exemplo, no meu arquivo está assim:
extension_dir = D:\PHP\extensions
Logo, é só você procurar por extension_dir dentro de tal arquivo...
Espero ter solucionado as dúvidas de vocês!
Abraços,
Luiz Gustavo Cardoso Ribeiro
E tem uma outra coisa que eu esqueci de citar anteriormente, além de você colocar a extensão no diretório, você deve incluir a extensão em seu php.ini da seguinte forma:
extension=php_gd.dll
Você provavelmente tem essa linha em seu php.ini já, mas comentada, se não tiver, é só adicionar ela...
Se você não souber qual o seu diretório de extensões do PHP, você pode ver em seu php.ini isso, por exemplo, no meu arquivo está assim:
extension_dir = D:\PHP\extensions
Logo, é só você procurar por extension_dir dentro de tal arquivo...
Espero ter solucionado as dúvidas de vocês!
Abraços,
Luiz Gustavo Cardoso Ribeiro
18/04/2002 5:12pm
(~23 anos atrás)
Não... Plataformas unix também podem usar, mas eu não tenho conhecimento de como fazer isso.
Vou procurar material sobre o assunto, se eu encontrar, eu coloco aqui a url...
Abraços,
Luiz Gustavo Cardoso Ribeiro
Vou procurar material sobre o assunto, se eu encontrar, eu coloco aqui a url...
Abraços,
Luiz Gustavo Cardoso Ribeiro
17/04/2002 11:51am
(~23 anos atrás)