[salesforce][heroku]RMagicを利用した画像の結合

By |9月 27, 2012|heroku, salesforce, 未分類, |


最近はCI関連の技術に触れる機会が多かったので、たまには開発者の喜びを噛みしめるべく、Herokuで何か作ってみようかと触ってみました。

今回作成したのは女性の影絵に背景が付けれるサンプルです。
※サンプルはこちら

画像加工については以前phpのGDライブラリやimagemagickなどで触れた経験があったので、Rubyで置き換わるものを探してみたところRMagickを見つけたので試してみました。

■controller

[ruby]
#coding: utf-8
require "rubygems"
require "RMagick"
include Magick

class UpdpicController < ApplicationController
def index
@path = ”
if params[‘upload_file’]!=nil then
file=params[‘upload_file’]
@filename = file.original_filename
File.open("tmp/#{@filename}","wb"){ |f| f.write(file.read) }
@path = ‘http://’+request.host+’/updpic/’+@filename.sub(".", "/")

srcfile = File.open(‘app/assets/images/a.gif’, "rb") {|f| f.read }
if srcfile!=nil then
img1 = ImageList.new(‘app/assets/images/’+params[‘sel’]+’.gif’)
img2 = ImageList.new("tmp/#{@filename}")
img3 = img2.composite(img1, CenterGravity, 0, 0, OverCompositeOp);
img3.write("tmp/sample.jpg")
@path= ‘http://’+request.host+((request.host==’localhost’)?’:3000′:”)+’/updpic/sample/jpg’
end
end
end
def crtpic
send_file(‘tmp/'<<params[‘id’]<<‘.'<<params[‘ext’],:disposition => ‘inline’ )
end
end
[/ruby]

■route.rb

[ruby]
ImageSample::Application.routes.draw do
root :to => "updpic#index"
get "updpic/:id/:ext" => "updpic#crtpic"
end
[/ruby]

実際に画像を結合している部分は19行目となります。またheroku単体では永続的な静的ファイルの保存を許可していないので、一先ずtmpフォルダに出力して表示を行っています。

Viewからの画像参照について、一応将来の拡張を考え画像の参照URLではファイル名と拡張子を指定できるようにしています。(現在は固定のURL(アプリ名/tmp/sample/jpg)で呼び出しています)

RMagickは他にも画像加工できるみたいで楽しそうです。機会があったらもう少し触れてみようと思います。