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:
comentários 5






