Jump to content


Tutorial: Instalando E Usando Gd No Windows


  • Faça o login para participar
9 replies to this topic

#1 Whitesnake

Whitesnake
  • Visitantes

Posted 01/04/2004, 15:53

O GD Graphic Library é um módulo de linguagens como Perl, PHP, ... que permite ao usuário criar imagens dinamicamente. Aqui iremos aprender algumas coisas sobre o GD e seus add-ons.

Instalando o GD no WINDOWS
==========

O GD deve vir junto com o Perl (pelo menos veio no ActivePerl  ;) )
Mas seria bom verificar se existe o arquivo GD.pm na pasta perl/site/lib da raíz de seu sistema. Se não tiver, vc deverá instalá-lo do seguinte modo: abra o ppm.exe e execute o seguinte:

rep add http://theoryx5.uwinnipeg.ca/ppms
rep add http://theoryx5.uwin...rn:/PPMServer58
rep add http://www.activesta...es/5.8-windows/
install GD

Isso irá instalar o GD na versão mais recente, caso isso não ocorra, tente estes outros procedimentos:
install http://www.gmod.org/ggb/ppm/GD.ppd
install http://theoryx5.uwin....ca/ppms/GD.ppd
install http://theoryx5.uwin...packages/GD.ppd

Você poderá instalar os pacotes distribuidos pela CPAN que aumentam a capacidade de criação do GD e serão usados ao longo deste tutorial. Ao baixar alguns pacotes você deverá instalá-los na pasta de seu nome (dentro de perl/site/lib/GD) substituindo sempre :: por /
Exemplo:

O módulo GD::Graph::area deverá ser instalado na pasta perl/site/lib/GD/Graph

==========


Agora que você instalou alguns módulos para o GD, podemos ver alguns exemplos sobre criação de imagens.


Criação de Texto e Objetos
==========

Abaixo passo-a-passo de um arquivo que cria uma imagem com um retângulo em volta.

Criação de Texto de Objetos

#!/usr/bin/perl
print "Content-type:image/png\n\n";

use GD;

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

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

    $im->transparent($branco); # Transforma o fundo em transparente
    $im->interlaced('true'); # Entrelaça a imagem

$im->string(gdGiantFont,15,45,"Texto GD",$vermelho); # Escreve "Texto GD" com a cor vermelho

$im->rectangle(6,94,94,6,$amarelo);                              # Cria um 'retângulo' com a cor amarelo

$im->fill(34,45,$preto);                                                   # Pinta o fundo de preto

binmode STDOUT;                                                           # Verifica se o modo é binário

print $im->png;                                                               # Transforma a imagem em PNG e exibe.

==========




Package Graph e seus componentes
==========

Bem, abaixo temos arquivos de exemplo que utilizam o componente Graph para a criação de gráficos.
Vejam:

Gráfico de área

#!/usr/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';

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 2003','Nov 2003','Dez 2003','Jan 2004','Fev 2004','Mar 2004');
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;

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

############################# Exibe o gráfico #########################
print "Content-type: image/png\n\n";
print $imagem->png;

Gráfico de barra

#!/usr/bin/perl

use strict;
use CGI ':standard';
use GD::Graph::bars; # Usamos 'GD::Graph::bars' pois nosso objetivo é criar um gráfico de barra

################## Cria as variáveis para exibir o gráfico #####################
my @campos = ('Out 2003','Nov 2003','Dez 2003','Jan 2004','Fev 2004','Mar 2004');
my @valores = ('547','2282','2798','2354','4326','357');
my @graf = (\@campos, \@valores); # Nomes dos campos antes dos valores
###############################################################

############################ Criação da imagem ######################
my $grafico = GD::Graph::bars->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 => 'Mês',                                                         # 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;

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

############################### Exibe o gráfico ######################
print "Content-type: image/png\n\n";
print $imagem->png;


Gráfico torta-circular

#!/usr/bin/perl

use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use GD::Graph::pie; # Usamos 'GD::Graph::pie' pois nosso objetivo é criar um gráfico torta-circular

#################### Cria as variáveis para exibir o gráfico ########################
my @campos = ('Out 2003','Nov 2003','Dez 2003','Jan 2004','Fev 2004','Mar 2004');
my @valores = ('547','2282','2798','2354','4326','357');
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(
pie_height => '32',                                                     # Expessura do efeito 3d. Ideal 0,1*altura
start_angle => '0',                                                   # Ângulo de onde iniciará os gráficos
suppress_angle => '14px',                                        # 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',                                                           # Adiciona efeito 3d se 1
) or warn $grafico->error;

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

############################### Exibe o gráfico ############################
print "Content-type: image/png\n\n";
print $imagem->png;

==========


Códigos de Barra
==========

Esse é um simples exemplo que gera códigos de barra de acordo com número especificado. A função Barcode necessita de um componente que neste exemplo utilizamos o GD::Barcode::Matrix2of5.

Códigos de Barra

#!/usr/bin/perl
use GD::Barcode::Matrix2of5; # GD::Matrix2of5 pode ser substituido por outro componente de Barcode
  binmode(STDOUT);
  print "Content-Type: image/png\n\n";
  print GD::Barcode::Matrix2of5->new('123')->plot->png; #O valor de new() é o número que será transformado em código de barra


==========


Se vcs quiserem exibir a imagem por link externo basta chamá-lo pela tag HTML comum de imagem: (y)

#2 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 01/04/2004, 20:05

Muito bom "apesar de ser o conteudo do search.cpan =D" o que vale e o aprender da coisa.

"bom saber que ele ja vem instalado no active perl, mas e quanto a gd nao precisa instalar o binario do site deles nao ?"

Movi seu topico para artigos e tutoriais =D

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#3 Whitesnake

Whitesnake
  • Visitantes

Posted 01/04/2004, 21:13

Axo que não será preciso...... o ActivePerl já traz a module GD.pm por default, só que na versão 1.2 (o meu eh essa).
Aproveitando a ocasião....... olha um exemplo legal de se usar GD (+/- igual do http://www.danasoft.com):

#!/usr/bin/perl
print "Content-type:text/html\n\n";

use GD;
$qs = $ENV{'QUERY_STRING'};
$ip = $ENV{'REMOTE_ADDR'};
if ($qs eq "exibir"){
print "
<form name=\"form\" method=\"post\" action=\"gdtest.cgi?criar\">
  <font face=\"Verdana, Arial, Helvetica, sans-serif\"><b><font size=\"2\">Coloque
  seu nome:</font></b></font>
  <input type=\"text\" name=\"nome\">
  <input type=\"submit\" value=\"OK\"style=\"font-size: 10 pt; color: #000000; font-family: Verdana; font-variant: small-caps; border: 1 solid #000000\">
</form>
";
}
elsif ($qs eq "criar"){

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
        ($name, $value) = split(/=/, $pair);
        $value =~ tr/+/ /;
        $FORM{$name} = $value;
}
if (length ($FORM{nome}) > "0")
{
$imagem = new GD::Image(395,33);

$preto = $imagem->colorAllocate(0,0,0);
$verde = $imagem->colorAllocate(68,209,20);

$imagem->rectangle (3,28,390,6,$verde);
$imagem->string(gdGiantFont,11,8,"Olá '$FORM{nome}' seu ip é $ip",$verde);
binmode STDOUT;

print $imagem -> png;
}}



#4 Whitesnake

Whitesnake
  • Visitantes

Posted 02/04/2004, 13:18

:P hehehh temos q compartilhar msm.....

uma module q eu descobri q faz thumbnail acho q se encaixaria bem nesse tópico..... é a Image::Thumbnail
Veja como usar:

#!/usr/bin/perl
use Image::Thumbnail

$gerar = new Image::Thumbnail(
module    => 'GD', #Pode usar o ImageMagick tb!
size      => 55, # Altura.... largura será definida auomatic...
create    => 1, # '0' não cria imagem
inputpath  => 'teste.jpg', #Imagem original
outputpath => 'p_teste.jpg', # Saída Thumbnail
);

Antes de tentar criar thumbnails é necessário baixar a module em www.cpan.org

#5 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 02/04/2004, 18:30

So no win msm viu

se fosse um linux heeh tu taria instalando imagemagik ate agora ... junto com o gd, libpng e zlib

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#6 Whitesnake

Whitesnake
  • Visitantes

Posted 04/04/2004, 10:26

hehehe + as distro de Linux num vem com isso tb?

#7 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 04/04/2004, 14:06

depende =D

algumas nao mas agora ja estao pensando em colocar o imagemagic como padrao.

mas tem varias coisas, freetype etc...

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#8 Whitesnake

Whitesnake
  • Visitantes

Posted 04/04/2004, 14:32

Ah, eh q eu tenho o SuSE aki e tem o Image Magick no cd de instalação sim

#9 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 04/04/2004, 18:34

em quase todos vem no cd mas na instalaçao nao sao todos que instalam ai depois vc msm tem que instalar ...

em uns basta dar o comando apt-get install imagemagic e pronto instala sozim em outros tem que ir no manual e se der alguma dependencia que gerar outra dependencia ai começa o inferno =p

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#10 Whitesnake

Whitesnake
  • Visitantes

Posted 04/04/2004, 19:59

Hehehehe..... por isso q prefiro Windows




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq