cairo と rcairo とは
- cairo: 二次元グラフィック描画ライブラリ
- rcairo: cairo の Ruby 用インターフェース
今回の動作確認環境
- macOS Sierra 10.12.4
- cairo 1.14.8
- ruby 2.4.0
- rcairo 1.15.5
cairo のインストール
$ brew install cairo
rcairo のインストール
$ gem install cairo
サンプルコード
新規作成、読み、書き、描画のサンプルコード。
require 'cairo'
require 'stringio'
# 画像を生成する
def make_image()
format = Cairo::FORMAT_ARGB32
width = 300
height = 200
# 画像の新規作成
surface = Cairo::ImageSurface.new(format, width, height)
context = Cairo::Context.new(surface)
context.set_source_rgb(1, 1, 1)
context.rectangle(0, 0, width, height)
context.fill
context.set_source_rgb(0, 0, 1)
context.arc(width / 2, height / 2, height / 4, 0, 2 * Math::PI)
context.fill
# PNG画像を書き込み
io = StringIO.new
surface.write_to_png(io)
io.pos = 0
io
end
# 画像にラクガキする
def draw_rakugaki(io)
# PNG画像を読み込み
surface = Cairo::ImageSurface.from_png(io)
context = Cairo::Context.new(surface)
w = surface.width / 4
h = surface.height / 4
context.set_source_color(Cairo::Color::GREEN)
context.set_line_width(10)
context.move_to(w, h)
context.line_to(w * 3, h * 3)
context.stroke
# PNG画像を書き込み
io = StringIO.new
surface.write_to_png(io)
io.pos = 0
io
end
open('sample1.png', 'wb') do |io|
io.write(make_image.read)
end
open('sample2.png', 'wb') do |output|
open('sample1.png', 'rb') do |input|
output.write(draw_rakugaki(input).read)
end
end
参考資料
- cairographics.org https://cairographics.org/
- cairo | RubyGems.org | your community gem host https://rubygems.org/gems/cairo
- rcairo reference manual http://rcairo.github.io/doc/
- Documentation for cairo http://www.rubydoc.info/gems/cairo/
- Rubyist Magazine - cairo: 2 次元画像描画ライブラリ http://magazine.rubyist.net/?0019-cairo