Assuntos relacionados à programação, pedaços de códigos, pequenas dicas, pequenos tutoriais, alguns vídeos, algumas fotos e etc.

Rapidinha: GIF animado com Ruby

Posted: abril 1st, 2009 | Author: Carlan Calazans | Tags: , , , , | No Comments »

A algumas horas atrás estava tentando criar um gif animado para o twitter. Esbarrei com uma solução usando Gimp, sugestão do oráculo. Fiz o gif animado. Alguns minutos depois, o lembrei de uma gem para Ruby chamada RMagick para processamento de imagens. Como nunca a tinha experimentado eis que veio a idéia de escrever uma classe para criar um gif animado.

A gem RMagick é baseada na biblioteca de imagens Image Magick comumente conhecida no mundo Linux pelo poder de seus utilitários em linha de comando. É, linha de comando, sem a necessidade de Gimp, FW, PS e similares. Quem nunca ouviu falar de import ou convert? ;)

A classe em questão é a:

require 'rubygems'
require 'RMagick'

include Magick

class AnimatedGif

  DELAY = 100
  LOOP = 0
 
  attr_accessor :source

  def save(file)
    load_files
    @list.delay = DELAY
    @list.iterations = LOOP
    @list.write(file)
  end

  private

  def load_files
    @list = ImageList.new
    Dir.new(source).entries.reject{|f| f =~ /^\./}.each do |f|
      @list.read "#{source}/#{f}"
    end
  end

end

#Usage:
gif = AnimatedGif.new
gif.source = 'img_src'
gif.save '/tmp/animated.gif'

O delay entre as imagens está fixo no código. O loop é infinito, ou seja, seu gif ficará se repetindo a vida toda. Após criar um objeto da classe AnimatedGif é necessário informar um diretório com imagens estáticas para gerar o gif animado. E por último, é só chamar o método save passando o caminho do arquivo gif final.

Demorou uns dois minutos a mais depois do entendimento da solução em Gimp para gerar esta classe em Ruby. Foram uns 3 minutos para entender a técnica do Gimp e 5 minutos para criar a classe em Ruby. A linguagem não morde!



Leave a Reply