Arquivo

Archive for the ‘GD: Graphic Library’ Category

Perl + GD Graphic Library: Exemplo 6 (Gerando Thumbnails)

Ao trabalhar com imagens, podemos utilizar o GD para gerar cópias com tamanhos diferentes, miniaturas.

A função copyResized foi feita especialmente para isto.

Junto com alguns comandos em Perl fica fácil fazer um script Gerador de Thumbnails.

Como esta é uma função nativa do GD, somente precisamos do módulo próprio:

use GD;

Este módulo nos dará várias funções para leitura de imagens, que é o que iremos precisar. Entre elas há newFromPng, newFromJpeg, newFromGif, newFromXbn, etc..

No nosso caso usaremos a newFromJPeg, pois trabalharemos com imagens JPEG.

$original = newFromJpeg GD::Image(“$caminho”);

Agora a imagem localizada em $caminho no servidor está armazenada na variável $original, pois é a imagem da qual iremos gerar a thumbnail.

Mas para gerar a nova thumbnail de modo dinâmico precisamos saber as dimensões da imagem original. Para isto usamos a função getBounds() que retorna a largura e altura da imagem.

($l,$a) = $original->getBounds();

Precisamos também setar o valor de uma das dimensões para a nova thumbnail. Sendo este valor um número qualquer especificado em $n_l, fazemos uma “regra de três básica” para descobrir a incógnita restante:

$n_a = ($n_l*$a)/$l;

Assim, $n_a será a nova altura diretamente proporcional às dimensões da nova imagem que será gerada.

Bem, agora é a hora em que o GD realmente começa a entrar em ação.

$THUMB = new GD::Image($n_l,$n_a);

Criamos uma nova imagem com as proporções obtidas e armazenamos em $THUMB.

Agora, resta-nos passar a imagem original para $THUMB. Usaremos então a função copyResized() passando como parâmetros a imagem, destX, destY, origemX, origemY, destT, destA, origemT, origemA.

$THUMB->copyResized($original,0,0,0,0,$n_l,$n_a,$l,$a);

Pronto, agora temos a thumbnail já fixada na nova imagem. Basta gravá-la em um arquivo.

Iremos utilizar o mesmo nome do arquivo, porém com o prefixo thumb_

Para obter o nome do arquivo, usamos o seguinte comando para remover as barras do caminho de origem:

$nome = $caminho =~ s/.*(/|\)//gi;

Vamos agora para a criação do novo arquivo:

open (THUMB,”>thumb_$caminho”) or die “$!”;
binmode THUMB;
print THUMB $THUMB->jpeg;
close(THUMB);

Caso nenhum erro seja retornado, será criado um novo arquivo com nossa thumbnail em novas dimensões.

Note o resultado

Photobucket

Resultado: gd-exemplo6.cgi

Photobucket

Imagem Original


Veja o Código Completo:
(gd-exemplo6.cgi)

#!/usr/bin/perl
print “Content-type:text/htmlnn”;

$caminho =”/home/gdlogobig.png”; # Imagem Original
$saida= “/home/thumbs/”;   # Saída das Thumbnails
$n_l  = “100”; # Nova largura que a thumbnail terá.

### – Chamamos o GD – ###
         use GD;
### —————- ###
$original = newFromPng GD::Image(“$caminho”); # Cria imagem para edição
($l,$a) = $original->getBounds(); # Pega as dimensões

 #### Calcula dimensões ###
$n_a = ($n_l*$a)/$l;
#######################

$THUMB = new GD::Image($n_l,$n_a); # Cria imagem vazia para a thumbnail
$THUMB->copyResized($original,0,0,0,0,$n_l,$n_a,$l,$a); # Coloca os dados na imagem
$caminho =~ s/.*(/|\)//gi; # Pega o nome da imagem

##### Grava a imagem #####
open (THUMB,”>$saida/thumb_$caminho”) or die “$!”;
binmode THUMB;
print THUMB $THUMB->png;
close(THUMB);
######################

print “Thumbnail gerada com sucesso!”;


Perl + GD Graphic Library
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 ]
Anúncios

Perl + GD Graphic Library: Exemplo 5 (Código de Barras EAN 13)

Este exemplo utilizará o módulo GD::Barcode para a criação de Códigos de Barras.

O GD pode lhe ser útil também para trabalhar com códigos de barras.

Utilizando o módulo Barcode você poderá gerar etiquetas compatíveis com vários padrões internacionais incluindo os principais EAN-8 e EAN-13.

Para este exemplo, o módulo utilizado foi:

use GD::Barcode::EAN13;

Obs.: Usamos ‘GD::Barcode::EAN13’ pois nosso objetivo é criar um código de barras EAN-13.

Para criar o gráfico apenas chame seu instanciador passando o código de barras por parâmetro:

my $barra = GD::Barcode::EAN13->new(‘8711253001205’);

Pronto.

Feito isto basta esboçar e mandar exibir o gráfico:

binmode(STDOUT);
print “Content-Type: image/png\n\n”;
print $barra->plot->png;

Compare os códigos de barra gerados:

Resultado: gd-exemplo5.cgi

Exemplo Válido da Wikipedia: Encoding EAN-13


Veja o Código Completo:
(gd-exemplo5.cgi)

#!/usr/bin/perl
use GD::Barcode::EAN13;
# GD::EAN13 pode ser substituido por outro módulo de Barcode. (EAN8,UPCA,UPCE….)

my $barra = GD::Barcode::EAN13->new(‘8711253001205’);
# Em new() definimos o código EAN 13 para criar as barras.

binmode(STDOUT);
print “Content-Type: image/png\n\n”;
print $barra->plot->png; # Esboça e Escreve


Perl + GD Graphic Library
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 ]

Perl + GD Graphic Library: Exemplo 4 (Gráfico Pizza)

Este exemplo utilizará o módulo GD::Graph para a criação de um Gráfico no estilo Pizza.

Para este exemplo, o módulo utilizado foi:

GD::Graph::pie;

Obs.: Usamos ‘GD::Graph::pie’ pois nosso objetivo é criar um gráfico pizza.

Assim como no Exemplo 2, carregamos os dados em dois arrays diferentes:

my @campos = (‘Out 2007′,’Nov 2007′,’Dez 2007′,’Jan 2008′,’Fev 2008′,’Mar 2008’);
my @valores = (‘547′,’2282′,’2798′,’2354′,’4326′,’1037’);

Estes dois itens serão armazenados em um array especial que guardará o endereço tanto array dos campos quanto a dos valores para que possa então esboçá-los no gráfico.

my @graf = (@campos,@valores);

Com todos os dados em mãos chamamos a função que criará um novo gráfico.

my $grafico = GD::Graph::pie->new(320, 300);

Agora temos na variável $grafico uma nova instância de gráfico de barras com 320x300px.

Para montar o gráfico utilizamos a função Graph set , passando o ângulo inicial, o ângulo nulo, o rótulo, o título do gráfico, valor do 3d, expessura 3d:

$grafico->set(
start_angle => ‘0’,    # Ângulo de onde iniciará os gráficos
suppress_angle => ‘0’,    # Se o nome do campo for menor que a área mencionada aqui ele não será exibido.
label => ‘Exemplo de Gráfico Circular’,  # Texto a aparecer abaixo do gráfico
title => ‘Visitas Mensais de “Um Site Qualquer”‘,        # Título do gráfico
‘3d’ => ‘1’,  # 1: Adiciona efeito 3d
pie_height => ’32’,   # Expessura do efeito 3d. Ideal 0,1*altura
) or warn $grafico->error;

Com isto o gráfico será criado, a menos que o warn retorne algum erro.

O próximo passo é passar os dados para o esboço.

A função plot faz isto:

$grafico = $grafico->plot(@graf) or die $grafico->error;

Se nenhum erro for retornado é sinal de que o gráfico foi criado com sucesso.

Nos resta então apenas exibí-lo na tela:

binmode STDOUT;
print “Content-type: image/pngnn”;
print $grafico->png;


Resultado: gd-exemplo4.cgi


Veja o Código Completo:
(gd-exemplo4.cgi)

#!/usr/bin/perl
use GD;
use GD::Graph::pie;
#  Usamos ‘GD::Graph::pie’ pois nosso objetivo é criar um gráfico de pizza

######## Cria as variáveis para exibir o gráfico ########
my @campos = (‘Out 2007′,’Nov 2007′,’Dez 2007′,’Jan 2008′,’Fev 2008′,’Mar 2008’);
my @valores = (‘547′,’2282′,’2798′,’2354′,’4326′,’1037’);
my @graf = (@campos, @valores);
################################
######## Criação da imagem ########
my $grafico = GD::Graph::pie->new(320, 300);
# Os valores de new são as dimensões do gráfico

$grafico->set(

start_angle => ‘0’,    # Ângulo de onde iniciará os gráficos
suppress_angle => ‘0’,    # Se o nome do campo for menor que a área mencionada aqui ele não será exibido.
label => ‘Exemplo de Gráfico Circular’,                       # Texto a aparecer abaixo do gráfico
title => ‘Visitas Mensais de “Um Site Qualquer”‘,        # Título do gráfico
‘3d’ => ‘1’,                                    # Se 1: Adiciona efeito 3d
pie_height => ’32’,   # Expessura do efeito 3d. Ideal 0,1*altura
) or warn $grafico->error;

$grafico = $grafico->plot(@graf) or die $grafico->error;
##########################
####### Exibe o gráfico ######
binmode STDOUT;
print “Content-type: image/pngnn”;
print $grafico->png;


Perl + GD Graphic Library
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 ]

Perl + GD Graphic Library: Exemplo 3 (Gráfico Barras 3D)

Este exemplo utilizará o módulo GD::Graph para a criação de um Gráfico no estilo Barras 3D.

Para este exemplo, o módulo utilizado foi:

GD::Graph::bars3d;

Obs.: Usamos ‘GD::Graph::bars3d’ pois nosso objetivo é criar um gráfico barras 3d.

Assim como no Exemplo 2, carregamos os dados em dois arrays diferentes:

my @campos = (‘Out 2007′,’Nov 2007′,’Dez 2007′,’Jan 2008′,’Fev 2008′,’Mar 2008’);
my @valores = (‘547′,’2282′,’2798′,’2354′,’4326′,’357’);

Estes dois itens serão armazenados em um array especial que guardará o endereço tanto array dos campos quanto a dos valores para que possa então esboçá-los no gráfico.

my @graf = (\@campos,\@valores);

Com todos os dados em mãos chamamos a função que criará um novo gráfico.

my $grafico = GD::Graph::bars3d->new(500, 300);

Agora temos na variável $grafico uma nova instância de gráfico de barras com 500x300px.

Para montar o gráfico utilizamos a função Graph set , passando a expessura da barra, o espaçamento entre as barras, o rótulo horizontal, vertical e o título do gráfico:

$grafico->set(
bar_width => ’25’,   # Expessura das barras
bar_spacing => ‘4’,  # Espaçamento entre as barras
x_label => ‘Mes’,     # Rótulo horizontal
y_label => ‘Visitas Totais’, # Rótulo vertical
title => ‘Visitas Mensais de “Um Site Qualquer”‘,  # Título do gráfico
) or warn $grafico->error;

Com isto o gráfico será criado, a menos que o warn retorne algum erro.

O próximo passo é passar os dados para o esboço.

A função plot faz isto:

$grafico = $grafico->plot(\@graf) or die $grafico->error;

Se nenhum erro for retornado é sinal de que o gráfico foi criado com sucesso.

Nos resta então apenas exibí-lo na tela:

binmode STDOUT;
print “Content-type: image/png\n\n”;
print $grafico->png;


Resultado: gd-exemplo3.cgi


Veja o Código Completo:
(gd-exemplo3.cgi)

#!/usr/bin/perl
use GD;
use GD::Graph::bars3d;
#  Usamos ‘GD::Graph::3dbars’ pois nosso objetivo é criar um gráfico de barras

######## Cria as variáveis para exibir o gráfico ########
my @campos = (‘Out 2007′,’Nov 2007′,’Dez 2007′,’Jan 2008′,’Fev 2008′,’Mar 2008’);
my @valores = (‘547′,’2282′,’2798′,’2354′,’4326′,’357′);
my @graf = (\@campos, \@valores);
################################
######## Criação da imagem ########

my $grafico = GD::Graph::bars3d->new(500, 300);
# Os valores de new são as dimensões do gráfico

$grafico->set(
bar_width => ’25’,   # Expessura das barras
bar_spacing => ‘4’,  # Espaçamento entre as barras
x_label => ‘Mes’,   # Rótulo horizontal
y_label => ‘Visitas Totais’, # Rótulo vertical
title => ‘Visitas Mensais de “Um Site Qualquer”‘, # Título do gráfico
) or warn $grafico->error;

$grafico = $grafico->plot(\@graf) or die $grafico->error;
##########################
####### Exibe o gráfico ######
binmode STDOUT;
print “Content-type: image/png\n\n”;
print $grafico->png;


Perl + GD Graphic Library
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 ]

Perl + GD Graphic Library: Exemplo 2 (Gráfico de Área)

Este exemplo utilizará o módulo GD::Graph para a criação de um Gráfico no estilo Área.

Assim, as primeiras instruções do programa serão:

use GD;

e

use GD::Graph::area;

Obs.: Usamos ‘GD::Graph::area’ pois nosso objetivo é criar um gráfico de área.

Tendo então os módulos carregados, podemos iniciar a construção do programa.

Neste exemplo, assim como nos dois artigos posteriores, colocarei exemplos ficticios em duas listas, de campos e de valores, para a demonstração no programa.

my @campos = (‘Out 2007′,’Nov 2007′,’Dez 2007′,’Jan 2008′,’Fev 2008′,’Mar 2008’);
my @valores = (‘547′,’2282′,’2798′,’2354′,’4326′,’357’);

Estes dois itens serão armazenados em um array especial que guardará o endereço tanto array dos campos quanto a dos valores para que possa então esboçá-los no gráfico.

my @graf = (@campos,@valores);

Com todos os dados em mãos nos resta agora chamar a função que criará um novo gráfico.

Esta é a:

my $grafico = GD::Graph::area->new(500, 300);

Agora temos na variável $grafico uma nova instância de gráfico de área com 500x300px.

Para montar o gráfico utilizamos a função Graph set , passando o rótulo horizontal, o rótulo vertical e o título do gráfico:

$grafico->set(
x_label => ‘Mes’, # Rótulo horizontal
y_label => ‘Número de Visitas’, # Rótulo vertical
title => ‘Visitas Mensais de “Um Site Qualquer”‘, # Título do gráfico
) or warn $grafico->error;

Com isto o gráfico será criado, a menos que o warn retorne algum erro.

O próximo passo é passar os dados para o esboço.

A função plot faz isto:

$grafico = $grafico->plot(@graf) or die $grafico->error;

Se nenhum erro for retornado é sinal de que o gráfico foi criado com sucesso.

Nos resta então apenas exibí-lo na tela:

binmode STDOUT;
print “Content-type: image/pngnn”;
print $grafico->png;


Resultado: gd-exemplo2.cgi


Veja o Código Completo:
(gd-exemplo2.cgi)

#!/usr/bin/perl
use GD;
use GD::Graph::area;
#  Usamos ‘GD::Graph::area’ pois nosso objetivo é criar um gráfico de área

######## Cria as variáveis para exibir o gráfico ########
my @campos = (‘Out 2007′,’Nov 2007′,’Dez 2007′,’Jan 2008′,’Fev 2008′,’Mar 2008’);
my @valores = (‘547′,’2282′,’2798′,’2354′,’4326′,’357’);
my @graf = (@campos, @valores);
################################
######## Criação da imagem ########
my $grafico = GD::Graph::area->new(500, 300);
# Os valores de new são as dimensões do gráfico

$grafico->set(
x_label => ‘Mes’, # Rótulo horizontal
y_label => ‘Número de Visitas’,  # Rótulo vertical
title => ‘Visitas Mensais de “Um Site Qualquer”‘, # Título do gráfico
) or warn $grafico->error;

$grafico = $grafico->plot(@graf) or die $grafico->error;
##########################
####### Exibe o gráfico ######
binmode STDOUT;
print “Content-type: image/pngnn”;
print $grafico->png;


Perl + GD Graphic Library
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 ]

Perl + GD Graphic Library: Exemplo 1 (Desenho+Texto)

Com o GD instalado podemos então começar as demonstrações.

Para começar iremos fazer um programa em CGI que criará uma imagem contendo o desenho de um quadrado com uma borda e um texto em seu centro.

Após indicar o caminho do Perl, nosso programa deve conter no começo a chamada do módulo GD assim também como a instânciação deste:

use GD;

my $im = new GD::Image(100,100);

Já de início definimos as dimensões da nova imagem e a armazenamos na variável $im.

Em seguida vamos definir as cores com as quais iremos trabalhar.

Para isto usaremos a função colorAllocate do GD passando por parâmetro os valores RGB da cor desejada. Note:

my $amarelo = $im->colorAllocate(255,255,0);

Para definir a cor de fundo do nosso desenho usamos a função fill passando posições nulas e a cor por parâmetro:

$im->fill(0,0,$preto);

Também foi feito um retângulo na imagem para exemplificar a função rectangle. Aqui passamos por parâmetro as dimensões (inicioX,fimX,inicioY,fimY) junto com a cor:

$im->rectangle(6,94,94,6,$amarelo);

E para escrevermos o texto na imagem usamos a função string, onde passamos o estilo da fonte, x, y, texto e a cor do texto:

$im->string(gdGiantFont,12,45,”GD + PERL”,$vermelho);

Para finalmente exibir na tela, primeiro devomos converter a saída para modo binário usando:

binmode STDOUT;

Também é necessário setar o formato de saída no cabeçalho:

print “Content-type:image/png\n\n”;

Finalmente agora podemos enviar a imagem para o usuário.

Para isto imprimimos na tela a imagem convertida para o formato de saída desejado (gif,jpeg,png…).

No nosso caso utilizamos png:

print $im->png;


Resultado (gd-exemplo1.cgi)


Veja o Código Completo:
(gd-exemplo1.cgi)

#!/usr/bin/perl
use GD;

my $im = new GD::Image(100,100); # Cria uma imagem com dimensões 100×100

############## Determina Cores em Variáveis ##############
my $preto = $im->colorAllocate(0,0,0);
my $branco = $im->colorAllocate(255,255,255);
my $vermelho = $im->colorAllocate(255,0,0);
my $amarelo = $im->colorAllocate(255,255,0);
################################################

$im->fill(0,0,$preto);    # Pinta o fundo de preto
$im->rectangle(6,94,94,6,$amarelo);  # Cria um ‘retângulo’ com a cor amarelo
$im->string(gdGiantFont,12,45,”GD + PERL”,$vermelho); # Escreve texto com a cor vermelho
binmode STDOUT; # Verifica se o modo é binário
print “Content-type:image/png\n\n”;
print $im->png;   # Transforma a imagem em PNG e exibe.


Perl + GD Graphic Library
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 ]

Perl + GD Graphic Library: Instalação

O GD Graphic Library é um módulo gráfico para linguagens como Perl, PHP, etc … que permite ao usuário criar e manipular imagens dinamicamente. Aqui iremos aprender como instalar e utilizar o GD com seus recursos.

Todo interpretador Perl possui sua pasta para módulos. Esta geralmente se encontra sob site/lib onde o Perl foi instalado.

Algumas distribuições possuem por padrão o módulo GD, mas se você estiver usando o ActivePerl talvez necessite instalar o GD manualmente. Se este for o caso, siga estes passos:

No ppm do ActivePerl execute os seguintes comandos para adicionar repositório:

rep add http://theoryx5.uwinnipeg.ca/ppms
rep add http://theoryx5.uwinnipeg.ca/cgi-bin/ppmse…rn:/PPMServer58
rep add http://www.activestate.com/ppmpackages/5.8-windows/

Feito isto, chame o instalador por:

install GD

Isso irá instalar o GD na versão mais recente, caso isso não ocorra, tente executar diretamente estes outros procedimentos:

install http://www.gmod.org/ggb/ppm/GD.ppd
install http://theoryx5.uwinnipeg.ca/ppms/GD.ppd
install http://theoryx5.uwinnipeg.ca/ppmpackages/GD.ppd

Agora que você já possui o GD, poderá instalar outros módulos distribuidos pela CPAN que aumentam a capacidade de criação do GD e serão usados ao longo deste tutorial sobre GD.

Para instalá-los, você deverá sempre respeitar a hierarquia da pasta substituindo :: por /

Exemplo:

GD::Graph::area deverá ser instalado na pasta perl/site/lib/GD/Graph


Perl + GD Graphic Library
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 ]