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
|
|
![]() Resultado: Usando GD
|
![]() 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!”;##############################################################



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!
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.