Início > Image Magick > Perl + Image Magick: Exemplo 4 (Gerando Thumbnails)

Perl + Image Magick: Exemplo 4 (Gerando Thumbnails)

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 ]

  1. Fernando
    4 Agosto, 2008 às 9:38 am | #1

    Antes parabenizo pelas informações contidas aqui. Muitas informações úteis relacionadas a perl. Muito legal!

    Quanto aos últimos posts… acho que só falta dar um exemplo de captcha.

    Amigo, tenho uma dúvida que acho que é bastante simples de resolver, porém não encontrei ainda a solução.

    Fica muito inviável toda imagem criada pelo IM ser armazenado no servidor para então mostrá-la ao usuário, certo? Ao invés de gravar a imagem no servidor, o interessante é gravá-la em cache no próprio usuário.

    Como fazer isso? Responda por aqui, ou para meu email: fernandolouis@terra.com.br

    Valeu,
    Abraço!

  2. Whitesnake
    4 Agosto, 2008 às 11:30 am | #2

    Olá Fernando, primeiramente obrigado pelos elogios, e gostei da idéia de um captcha, vou ver se coloco nos posts posteriores.

    Bem, e quanto a sua dúvida, realmente você tem razão!
    Você está falando da técnica on-the-fly.

    Há casos onde não há vantagem de se armazenar uma imagem no servidor para somente depois mostrar ao usuário.

    É o que acontece no Exemplo 2 do IM.

    Como vamos mostrar um valor dinâmico, um IP, não faz sentido armazenarmos no servidor, correto?

    Mas note que no próprio exemplo não salvamos a imagem como neste exemplo de thumbnails.

    Quando chamamos a função Write, não informamos um nome de arquivo, mas apenas o formato de saída, seguido por um ‘ – ‘. Isto faz com que a imagem criada seja retornada na tela somente ao usuário, sem ter que necessariamente criar um novo arquivo no servidor.

  1. No trackbacks yet.