Marca-d’agua com Rails

Postado por Marcus Sá no dia 14 de julho

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

comentários 5

  • http://topsy.com/trackback?url=http%3A%2F%2Fwww.woompa.blog.br%2F2010%2F07%2F14%2Fadicionando-marca-dagua-nas-suas-imagens-com-imagemagick-e-mini-magick%2F%3Fsms_ss%3Dtwitter&utm_source=pingback&a Tweets that mention Marca-d’agua com Rails : Blog da start-up Woompa! — Topsy.com

    [...] This post was mentioned on Twitter by Flavio Steffens, Ana Claudia de Sá. and others. Ana Claudia de Sá. said: Marca-d’agua com Rails: http://bit.ly/dqvgA2 via @addthis por @sa_vini da equipe @woompa [...]

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