Um exemplo de como eu fiz para automatizar o envio de imagens para o otimizador de imagens Yahoo Smush.it utilizando Ruby,Rails, Paperclip, Crack e RIO.
Infelizmente o Yahoo Smush.it não dispõe de uma API para envio e download das imagens.
Mas é possível eu enviar uma imagem e receber a resposta através de uma arquivo JSON.
Para automatizar a otimização das imagens precisamos “ler” sua localização, envia-la para o Smush.it e depois “ler” a localização da imagem otimizada pra tal utilizaremos algumas gems.
Open-uri
Crack, que é o JSON parser, que irá transformar o objeto JSON em objeto Ruby
RIO, utilizo ele para gravar a imagem otimizada sobre a outra, você pode usar o Rmagick ouMinimagick para fazer o mesmo.
Para instalar as gems
Como estou utilizando Rails criei o método “otimiza” no model “Imagem” que é invocado após o create.
class Imagem < ActiveRecord::Base
#app/modelos/imagem.rb
class Imagem < ActiveRecord::Base
has_attached_file :photo
after_create :otimiza
def otimiza()
if self.photo_file_size < 1000000 #limite imposto pelo smush.it
require 'rubygems' #desnecessário caso utilize Ruby 1.9
require 'crack'
require 'open-uri'
require 'rio'
dominio=’’
#o open-uri não consegue utilizar o método POST por isso
#a imagem tem que estar acessível pela internet, impedindo assim de enviá-la direto ao smush.it
imagem= self.photo.url #endereço da imagem
file = dominio+imagem
response = open('http://smushit.com/ysmush.it/ws.php?img='+file).read
#captura o arquivo JSON através de GET.
path = Crack::JSON.parse(response)['dest']
#Lê o caminho da imagem otimizada e grava na variável path
path.to_s #converte a variável path para string
rio(''+imagem).binmode < rio(path).binmode
#grava a nova imagem sobre a antiga
end
end #fecha otimiza
end
Provavelmente existem formas mais DRY de fazer essa automatização mas foi assim que consegui depois de dois dias ralando XD
Nenhum comentário:
Postar um comentário