原文:RMagick User’s Guide and Reference — Drawing with RVG
介紹
RVG(Ruby 向量圖形)是 RMagick 的 Draw 類別的外觀,它提供了基於 W3C 推薦的可縮放向量圖形(Scalable Vector Graphics)的繪圖 API。
RVG 是一個可縮放向量繪圖函式庫。可縮放意味著圖形不是固定的像素尺寸。相同的圖形可以被呈現在螢幕上或列印出來。向量圖使用了幾何物件,如直線和圓。與點陣圖不同,向量圖在放大時不會「像素化」。
作為 RVG 函式庫的介紹,讓我們來看看如何畫出上面這隻小鴨。以下是完整的程式。
require 'rvg/rvg'
include Magick
RVG::dpi = 72
rvg = RVG.new(2.5.in, 2.5.in).viewbox(0,0,250,250) do |canvas|
canvas.background_fill = 'white'
canvas.g.translate(100, 150).rotate(-30) do |body|
body.styles(:fill=>'yellow', :stroke=>'black', :stroke_width=>2)
body.ellipse(50, 30)
body.rect(45, 20, -20, -10).skewX(-35)
end
canvas.g.translate(130, 83) do |head|
head.styles(:stroke=>'black', :stroke_width=>2)
head.circle(30).styles(:fill=>'yellow')
head.circle(5, 10, -5).styles(:fill=>'black')
head.polygon(30,0, 70,5, 30,10, 62,25, 23,20).styles(:fill=>'orange')
end
foot = RVG::Group.new do |_foot|
_foot.path('m0,0 v30 l30,10 l5,-10, l-5,-10 l-30,10z').
styles(:stroke_width=>2, :fill=>'orange', :stroke=>'black')
end
canvas.use(foot).translate(75, 188).rotate(15)
canvas.use(foot).translate(100, 185).rotate(-15)
canvas.text(125, 30) do |title|
title.tspan("duck|").styles(:text_anchor=>'end', :font_size=>20,
:font_family=>'helvetica', :fill=>'black')
title.tspan("type").styles(:font_size=>22,
:font_family=>'times', :font_style=>'italic', :fill=>'red')
end
canvas.rect(249,249).styles(:stroke=>'blue', :fill=>'none')
end
rvg.draw.write('duck.gif')
摘要
所有的繪圖都遵循相同的 3 個步驟:
- 建立一個 RVG 物件。指定最終圖片的寬度和高度。轉交程式碼區塊給
RVG.new
方法。
- 在程式區塊內,在 RVG 物件調用方法來指定背景,加入形狀、文字或點陣圖,或加入一組形狀、文字或點陣圖。
- 調用
draw
方法在背景繪出形狀、文字或點陣圖。
我將逐行介紹範例。