Arquivo

Posts Tagged ‘thumbnail’

Perl + Image Magick: Exemplo 4 (Gerando Thumbnails)

22 julho, 2008 2 comentários

Se você sempre achou dificil encontrar aquele programa que fizesse de tudo com suas imagens, enfim, sua procura acabou não é mesmo?

Ao acompanhar estes tutoriais você com certeza deve estar convencido da qualidade do IM.

E neste assunto o IM também não poderia ficar de fora – Gerar Thumbnails

O ImageMagick é essencial para redimensionar imagens com qualidade. Além de suportar inúmeros tipos de arquivos, ele transforma nossas imagens em perfeitas cópias remodeladas, e o melhor, sem exagerar no tamanho. Vamos ver passo-a-passo de um exemplo de como redimensionar imagens com ele, e em seguida uma demonstração.

Primeiro, devemos instanciar o módulo

$novo = Image::Magick -> new( );

Em seguida, carregamos a imagem que iremos trabalhar

$novo -> Read(“$caminho”);

Agora vamos obter as dimensões da imagem

($largura, $altura) = $novo -> Get(‘width’, ‘height’);

Tendo sido definida a nova largura, fazemos uma regra de três para obter a dimensão final restante, no caso a altura final

$n_a=($n_l*$altura/$largura);

Agora, a função que realiza todo o trabalho, Resize

  $nova_imagem  = $novo -> Resize(
  width => $n_l,
  height => $n_a,
  );

Enfim mandamos escrever a nova imagem

$nova_imagem = $novo -> Write(“$saida/thumb.jpg”);

Pronto, você agora tem um redimensionador de imagens da melhor qualidade! Se comparando com o GD, podemos notar como o ImageMagick é capaz de suavizar os pontos da imagem, tornando-a assim muito mais nítida. Veja: 


 

 

Imagem Original

Imagem Original

 

 

Imagem redimensionada usando GD

Resultado: Usando GD

 

 

Usando ImageMagick

Resultado: Usando ImageMagick

 

 


 

 

Veja o Código Completo:
(im-exemplo4.pl)

#!/usr/bin/perl
use Image::Magick;
$caminho =”/home/imagem.jpg”; # Imagem Original
$saida= “/home”; # Saída da Thumbnail
$n_l=”90″; # Nova largura que a thumbnail terá

##############################################################
$novo = Image::Magick -> new( ) or die $!; # Cria imagem
$novo -> Read(“$caminho”); # Lê a imagem

($largura, $altura) = $novo -> Get(‘width’, ‘height’); # Pega as dimensões

$n_a=($n_l*$altura/$largura); # REGRA DE TRÊS

#### Redimensiona ####
$nova_imagem = $novo -> Resize(
width => $n_l,
height => $n_a,
);
#####################

$caminho =~ s/.*(/|\)//gi; # …Queremos só o nome da imagem
$nova_imagem = $novo -> Write(“$saida/thumb_$caminho”);
print “Thumbnail gerada com sucesso!”;

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

 Image Magick
[ 1 | 2 | 3 | 4 | 5 ]

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 ]