RMagickで描いた絵をrailsで表示するサンプル
前提:
基本的にImageMagickとRMagickだけ入れれば良いのだけど,
とりあえず,色々入れておきます.
mac ports と rubygems が利用できるようになっている必要が在ります.
% sudo port install jpeg
% sudo port install libpng
% sudo port install libwmf
% sudo port install tiff
% sudo port install lcms
% sudo port install freetype
% sudo port install ImageMagick
% sudo port install ghostscript% sudo gem install rmagick
次に,Railsの方で線を描いてみます.
例えば,controller が graph_controller.rb , viewが,graph/index.rhtml とすると
viewに
<img src="<%= url_for :action=>'your_img', :x1=>10, :y1=>10, :x2=>150, :y2=>180 %>" />
という1行を入れます.ここでGraphControllerのyour_imgメソッドが呼ばれます.
GraphController クラス内に,次のメソッドを作成します.
def your_img
width=200
height=200canvas = YourImageView.new(width, height)
canvas.draw_line(params[:x1], params[:y1], params[:x2], params[:y2])
send_data(canvas.to_blob, :type=> 'image/png')
end
あと $rails_root(appとかconfigとかあるディレクトリ)/lib/your_image_view.rb として,次の内容のファイルを書きます.
これで,http://localhost/graph にアクセスすると,線が1本描かれたものが出て来ます.
線の始点と終点は,index.rhtmlのimgタグの引数(x1, y1, x2, y2)になっています.
lib/ 下のクラスは,railsが勝手に読み込んでくれます.
線を引く系統の命令(楕円とか,多角形とか)の使い方,
http://www.simplesystems.org/RMagick/doc/rvgshape.html
などに書かれています.
require 'RMagick' class YourImageView include Magick include Reloadable attr_reader :canvas def initialize(width, height) @width= width @height = height @fg_color = 'black' @bg_color = 'white' @canvas = Magick::Image.new(@width, @height) end def draw_line x1, y1, x2, y2 line = Magick::Draw.new line.fill @fg_color line.stroke @fg_color line.stroke_width 2 line.line(x1.to_i, y1.to_i, x2.to_i, y2.to_i) line.draw @canvas end def to_blob(fileformat='PNG') return @canvas.to_blob do self.format = fileformat end end end