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

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


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

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

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

■controller

#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

■route.rb

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

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

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

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です