Marca-d’agua com Rails

  • 14 de julho de 2010
  •    Postado por Marcus Sá
  •    5

Esqueça o trabalho braçal do Photoshop, Gimp e correlatos: criar uma marca d’água utilizando a linguagem Ruby on Rails é muito fácil. Utilizamos recentemente no projeto do CalaBocaGalvao e foi aprovado! Neste post, você aprenderá a fazer o mesmo.

Como vocês já devem ter lido no nosso post sobre o case www.calabocagalvao.com.br aqui no blog, andamos desenvolvendo coisas muito interessantes aqui na Woompa com o intuito de adicionar cada vez mais conhecimento a todos aqui na empresa. E achamos que seria muito legal compartilhar esse conhecimento com todos vocês, esse é o objetivo desse post, então vamos lá.

Nesse projeto nós permitimos aos usuário enviar algumas fotos ou montagens, que na maioria foram hilárias e pensamos que essas fotos poderiam ser utilizadas em muitos lugares devido ao seu conteúdo cômico, decidimos então colocar uma marca-d’agua nessas imagens para que as pessoas que as vissem pudessem chegar ao site e compartilhar suas fotos também.

Neste case nós desenvolvemos no Windows, e depois de ler alguns impeditivos para usar uma outra ferramenta optamos por: ImageMagick, Mini-Magick e attachment_fu para fazer o trabalho sujo ;)

Depois de tudo instalado, colocamos a mão na massa e partimos para o código, no model de photo nós colocamos o código para que o modelo saiba que teremos nele um arquivo anexado:

  has_attachment :content_type => :image,
    :storage  => :file_system,
    :max_size => 2.megabytes,
    :resize_to => '500x500',
    :processor => "MiniMagick",
    :thumbnails => {
      :thumb => '154x154>',
      :thumb_home => '140x110>',
    }

Pronto, feito isso e colocando o

:multipart => true

no form da nossa view já tinhamos pronta a rotina que enviava, redimensiona e criava as miniaturas(RoR, eu te amo!). Mas ainda não tinhamos a nossa marca-d’agua, então vamos lá. No mesmo model de photo nós usamos o callback after_attachment_saved para juntar as imagens, o código é o seguite:

  after_attachment_saved do |image|
    if image.thumbnail.nil?
      img = MiniMagick::Image.from_file(image.full_filename())
      img.combine_options do |c|
        c.gravity 'SouthWest'
        c.draw "image Over 0,0 0,0 public/images/marcadagua.png"
      end
 
      img.write(image.full_filename())
    end
  end

Bom, vamos ver o que acontece ali. Pra começar, no bloco do callback nós testamos se não é uma miniatura que está sendo salva, caso não seja mesmo nós jogamos essa imagem na variável img, combinamos ela com a imagem public/images/marcadagua.png e definimos que ela ficará em SouthWest, que é no canto inferior esquerdo, depois disso salvamos a imagem já com a marca-d’agua e pronto, ai está nosso código, simples assim. Abaixo um exemplo de como ficou nossa imagem:

Exemplo de marca-d'agua com Ruby on Rails


  • Pingback: Tweets that mention Marca-d’agua com Rails : Blog da start-up Woompa! -- Topsy.com

  • Paula Tavares

    Muito bom o post! Era bem o que eu tava procurando. Me ajudou muito ;)

  • vinicius luiz

    Excelente @marcus,
    cara so uma pergunta, no caso de uma imagem com 4 marcad`aguas (uma em cada ponta), como seria ???

    abracos..

  • http://www.felipepavao.com Felipe Pavao

    Vinicius,

    teoricamente vc deve aplicar 4 vezes para cada marca d’agua…
    abs.

  • http://www.diegorv.com @diegorv

    Sensacional Marcus,

    Bem simples, estava procurando isso a um tempo!

    Obrigado por compartilhar!