Redimensionando imagens com Ruby e Image Science no Mac OS X
02/07/08
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.
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 - Permalink
- Trackback
- Comentários (0)
- Ao som de: Propagandhi – A Public Dis-service Announcement From Shell
Mudança no RSpec 1.1.4 remove inclusão automática de módulos
25/06/08
No RSpec 1.1.4, a inclusão de módulos deixou de ser automática. Você só irá perceber esta mudança se está testando algum módulo, como é o caso dos helpers.
Antes, você só precisava fazer algo como isto:
describe ApplicationHelper do
it "should render flash[:notice]" do
flash[:notice] = "Some notice"
flash_messages.should have_tag('p.notice', 'Some notice')
end
end
Nesta nova versão, se você tentar testar o método flash_messages, irá receber uma mensagem de aviso:
Modules will no longer be automatically included in RSpec version 1.1.4. Called from ./spec/helpers/application_helper_spec.rb:6
A solução é fazer a inclusão manual dos módulos, como este exemplo
describe ApplicationHelper do
include ApplicationHelper
it "should render flash[:notice]" do
flash[:notice] = "Some notice"
flash_messages.should have_tag('p.notice', 'Some notice')
end
end
ou utilizar o objeto helper, que possui todos os métodos do módulo especificado em describe
describe ApplicationHelper do
it "should render flash[:notice]" do
flash[:notice] = "Some notice"
helper.flash_messages.should have_tag('p.notice', 'Some notice')
end
end
Em um primeiro momento, eu não tinha gostado nem um pouco desta alteração, mas depois de
ler os motivos, acho que ficou muito melhor. Você teria dúvidas de que está testando um helper se utilizar helper.flash_messages? E se você tivesse um módulo com um método describe?
As respostas já justificam a alteração por si sós.
- Permalink
- Trackback
- Comentários (0)
- Ao som de: Propagandhi – A Public Dis-service Announcement From Shell
Otimizando o Autotest
20/06/08
Toda vez que executo o Autotest,
não demora muito para o cooler do meu Macbook
ligar e parecer que vai decolar!
O problema é que o Autotest busca alterações nos arquivos a cada segundo, o que ocasiona um uso muito intenso da CPU.
Para resolver este problema, basta você aumentar este tempo de verificação que, no exemplo abaixo, foi definido como 5 segundos. Além disso, podemos ignorar alguns diretórios, diminuindo os arquivos que precisam ser verificados. Abra seu arquivo "~/.autotest" e adicione o código abaixo.
Autotest.add_hook :initialize do |at|
at.sleep = 5
%w{.svn .git public vendor}.each { |exception| at.add_exception(exception) }
end
Simples, rápido e, o melhor de tudo, silencioso!
- Permalink
- Trackback
- Comentários (0)
- Ao som de: Propagandhi – A Public Dis-service Announcement From Shell
