Arquivo

Posts Tagged ‘fill’

Perl + Image Magick: Exemplo 2 (Texto c/ Fundo Degradê e Relevo)

Com o ImageMagick em poucos passos podemos gerar uma imagem avançada, com relevo e tudo.  Mas vamos aplicar isto a uma situação real?

Imagine que você é o programador de um site que necessite gerar botões que recebem valores variáveis, como por exemplo, IPs. Seria impossível realizar este trabalho utilizando o Photoshop para criar uma imagem diferente para cada visitante de seu site, não é mesmo? Mas o IM torna isso possível! E com muito pouco esforço, vejam!

$novo  = Image::Magick-> new(size=>’330×65′);

Aqui instânciamos a imagem com o tamanho 330×65, agora devemos setar o fundo degradê

$imagem = $novo-> Read(‘gradient:#105CB6-#839E37’);

Note que especificando o valor gradient: podemos definir as duas cores que irão compor nosso degradê

Feito isso, podemos adicionar um efeito relevo para dar uma aparência real de botão, para isto utilizamos a função Raise

$imagem=$novo-> Raise(’12×4′);

Assim teremos a imagem com o fundo degradê e com relevo médio em cima e em baixo, porém grande relevo lateral.

Note que o relevo ficou bem evidente. Para dar uma suavizada, podemos utilizar a ferramenta borrar em movimento, MotionBlur

$imagem=$novo->MotionBlur(angle=>60,radius=>8,sigma=>12);

Esses parâmetros podem ser definidos como, o ângulo propriamente dito, o radius sendo a suavidade e o sigma o alcance. Isto basta para obtermos uma boa suavização lateral deixando o botão bem mais definido.

Obs.: Como esse comando foi dado antes do Annotate, ele não irá se aplicar ao texto escrito, se caso o comando fosse aplicado depois, então o texto também seria borrado.

Agora como passo final, vamos anotar o texto na imagem

$imagem=$novo-> Annotate( font    => ‘HATTEN.ttf’,
fill       => ‘white’,
pointsize  => 32,
gravity      => ‘Center’,
text          => “Olá, seu IP é $ENV{REMOTE_ADDR}”,
);

Como visto logo acima, em text podemos definir qualquer variável, o que faz de nosso programa ser bem especial, pois neste caso, todo visitante obterá o seu próprio IP que é obtido através de $ENV{REMOTE_ADDR}.


Resultado: im-exemplo2.cgi


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

#!/usr/bin/perl

use Image::Magick;

###########################################################

$format = “jpeg”; # Formato de saída

$texto  = “Olá, seu IP é $ENV{REMOTE_ADDR}”;
# Aqui é o texto que vai aparecer na imagem

$novo  = Image::Magick-> new(size=>’330×65′);
# Cria imagem com as dimensões desejadas

$imagem = $novo-> Read(‘gradient:#105CB6-#839E37′);
# Lê a imagem e coloca-a em uma variável com um fundo degradê

$imagem=$novo-> Raise(’12×4’); # Adiciona um efeito de relevo

$imagem=$novo->MotionBlur(angle=>60,radius=>8,sigma=>10);
# Adiciona um efeito de borrar

$imagem=$novo-> Annotate(font     => ‘HATTEN.ttf’,# Fonte escolhida
fill        => ‘white’,                # Cor da fonte
pointsize  => 32,                 # Tamanho da fonte
gravity      => ‘Center’,        # Alinhamento
text          => $texto,            # Escreve o texto
);

print “Content-type:image/$formatnn”;
# Imprime o cabeçalho com o devido formato

binmode STDOUT;
# Converte a saída para binario

$imagem=$novo->Write( “$format:-” );
# Mostra a imagem no formato escolhido

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 ]