Redimensionando imagens com Ruby e Image Science no Mac OS X


Leia em 1 minuto

Se você precisa criar miniaturas de imagens com Ruby, esqueça o RMagick. Embora ele tenha muito mais funcionalidades que, convenhamos, quase ninguém usa, chegou a hora de conhecer o Image Science que, segundo seus autores, não sofre dos mesmos problemas de memory leak que o RMagick.

O Image Science possui algumas funções específicas para a geração de miniaturas, como redimensionamento e crop, utilizando o Free Image. Segundo os criadores do projeto, ele não sofre dos mesmos problemas de memory leak que RMagick.

Como instalar

Para instalar o Free Image, você precisará do XCode. Não se esqueça de adicionar o SDK para o Mac OS X 10.3.9, que não vem selecionado por padrão.

Tela de instalação do XCode

Instalando o Free Image

Baixe o código-fonte do Free Image na página do projeto SourceForge. A versão que instalei foi a 3.10.0.

Após extrair os arquivos, abra o arquivo "MakeFile.osx" e altere as linhas abaixo de

LIBRARIES_PPC = -Wl,-syslibroot /Developer/SDKs/MacOSX10.3.9.sdk
LIBRARIES_I386 = -Wl,-syslibroot /Developer/SDKs/MacOSX10.4u.sdk

para

LIBRARIES_PPC = -Wl,-syslibroot /Developer/SDKs/MacOSX10.3.9.sdk/usr/lib
LIBRARIES_I386 = -Wl,-syslibroot /Developer/SDKs/MacOSX10.4u.sdk/usr/lib

Agora, basta compilar!

make
sudo make install

Instalando o Image Science

Para finalizar, basta instalar o Image Science.

sudo gem install RubyInline
sudo gem install image_science

O Image Science é muito simples. Para redimensionar imagens proporcionalmente, limitando o maior tamanho, faça algo como o exemplo abaixo.

ImageScience.with_image(file) do |img|
  img.thumbnail(100) do |thumb|
    thumb.save "picture-thumb.jpg"
  end
end

Se você quiser redimensionar a imagem sem se preocupar com a proporção, você pode usar o método resize.

ImageScience.with_image(file) do |img|
  img.resize(100, 150) do |thumb|
    thumb.save "picture-thumb.jpg"
  end
end

E, por último, existe o método cropped_thumbnail, que recorta a imagem no tamanho especificado.

ImageScience.with_image(file) do |img|
  img.cropped_thumbnail(100) do |thumb|
    thumb.save "picture-thumb.jpg"
  end
end