rmagick 1.15.17 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rmagick might be problematic. Click here for more details.
- data/ChangeLog +78 -25
- data/README.html +117 -188
- data/README.txt +116 -181
- data/build_tarball.rake +205 -0
- data/doc/comtasks.html +2 -2
- data/doc/constants.html +118 -44
- data/doc/draw.html +57 -99
- data/doc/ex/adaptive_threshold.rb +1 -10
- data/doc/ex/add_noise.rb +4 -5
- data/doc/ex/axes.rb +1 -1
- data/doc/ex/bilevel_channel.rb +2 -13
- data/doc/ex/bounding_box.rb +3 -4
- data/doc/ex/channel.rb +6 -7
- data/doc/ex/clip_path.rb +11 -5
- data/doc/ex/color_histogram.rb +8 -20
- data/doc/ex/composite_layers.rb +53 -0
- data/doc/ex/fill_pattern.rb +26 -0
- data/doc/ex/get_multiline_type_metrics.rb +26 -37
- data/doc/ex/get_type_metrics.rb +25 -25
- data/doc/ex/images/notimplemented.gif +0 -0
- data/doc/ex/level.rb +1 -1
- data/doc/ex/matte_floodfill.rb +5 -6
- data/doc/ex/matte_replace.rb +5 -6
- data/doc/ex/negate_channel.rb +0 -10
- data/doc/ex/opacity.rb +3 -5
- data/doc/ex/polaroid.rb +4 -1
- data/doc/ex/posterize.rb +1 -12
- data/doc/ex/preview.rb +1 -8
- data/doc/ex/radial_blur.rb +1 -11
- data/doc/ex/raise.rb +1 -4
- data/doc/ex/random_threshold_channel.rb +4 -9
- data/doc/ex/sepiatone.rb +2 -9
- data/doc/ex/shadow.rb +12 -18
- data/doc/ex/sketch.rb +2 -9
- data/doc/ex/smile.rb +7 -7
- data/doc/ex/splice.rb +3 -10
- data/doc/ex/stegano.rb +5 -0
- data/doc/ex/threshold.rb +2 -2
- data/doc/ex/transpose.rb +1 -8
- data/doc/ex/transverse.rb +1 -8
- data/doc/ex/trim.rb +1 -2
- data/doc/ex/viewex.rb +4 -5
- data/doc/ex/vignette.rb +1 -8
- data/doc/ex/watermark.rb +1 -0
- data/doc/ex/wet_floor.rb +8 -14
- data/doc/ilist.html +301 -110
- data/doc/image1.html +362 -258
- data/doc/image2.html +429 -286
- data/doc/image3.html +418 -192
- data/doc/imageattrs.html +100 -39
- data/doc/imusage.html +26 -21
- data/doc/index.html +52 -93
- data/doc/info.html +160 -64
- data/doc/magick.html +37 -71
- data/doc/optequiv.html +155 -61
- data/doc/rvg.html +3 -3
- data/doc/rvgclip.html +2 -2
- data/doc/rvggroup.html +2 -2
- data/doc/rvgimage.html +3 -3
- data/doc/rvgpattern.html +3 -3
- data/doc/rvgshape.html +2 -2
- data/doc/rvgstyle.html +2 -2
- data/doc/rvgtext.html +2 -2
- data/doc/rvgtspan.html +4 -4
- data/doc/rvgtut.html +4 -4
- data/doc/rvguse.html +3 -3
- data/doc/rvgxform.html +2 -2
- data/doc/struct.html +26 -29
- data/doc/usage.html +99 -48
- data/examples/crop_with_gravity.rb +46 -0
- data/examples/demo.rb +2 -2
- data/examples/histogram.rb +11 -11
- data/examples/identify.rb +45 -45
- data/examples/spinner.rb +3 -2
- data/ext/RMagick/MANIFEST +7 -8
- data/ext/RMagick/extconf.rb +242 -0
- data/ext/RMagick/rmagick.h +136 -222
- data/ext/RMagick/rmdraw.c +226 -229
- data/ext/RMagick/rmfill.c +69 -118
- data/ext/RMagick/rmilist.c +234 -94
- data/ext/RMagick/rmimage.c +1719 -2564
- data/ext/RMagick/rminfo.c +433 -619
- data/ext/RMagick/rmmain.c +249 -487
- data/ext/RMagick/rmutil.c +344 -563
- data/lib/RMagick.rb +414 -358
- data/lib/rvg/clippath.rb +2 -2
- data/lib/rvg/container.rb +2 -2
- data/lib/rvg/describable.rb +2 -2
- data/lib/rvg/embellishable.rb +2 -2
- data/lib/rvg/misc.rb +3 -3
- data/lib/rvg/paint.rb +2 -7
- data/lib/rvg/pathdata.rb +2 -2
- data/lib/rvg/rvg.rb +2 -2
- data/lib/rvg/stretchable.rb +2 -14
- data/lib/rvg/stylable.rb +2 -2
- data/lib/rvg/text.rb +2 -2
- data/lib/rvg/transformable.rb +2 -2
- data/lib/rvg/units.rb +2 -2
- data/{metaconfig.in → metaconfig} +0 -1
- data/post-setup.rb +1 -1
- data/rmagick.gemspec +6 -9
- metadata +41 -49
- data/Makefile.in +0 -42
- data/configure +0 -12358
- data/configure.ac +0 -791
- data/ext/RMagick/extconf.rb.in +0 -25
- data/ext/RMagick/rmagick_config.h.in +0 -285
- data/gem_extconf.rb +0 -42
@@ -4,16 +4,7 @@ require 'RMagick'
|
|
4
4
|
# Demonstrate the Image#adaptive_threshold method
|
5
5
|
|
6
6
|
img = Magick::Image.read("images/Flower_Hat.jpg").first
|
7
|
-
|
8
|
-
begin
|
9
|
-
result = img.adaptive_threshold
|
10
|
-
|
11
|
-
# Substitute the standard "Not Implemented" image
|
12
|
-
rescue NotImplementedError
|
13
|
-
result = Magick::Image.read("images/notimplemented.gif").first
|
14
|
-
result.resize!(img.columns, img.rows)
|
15
|
-
end
|
16
|
-
|
7
|
+
result = img.adaptive_threshold
|
17
8
|
result.write("adaptive_threshold.jpg")
|
18
9
|
exit
|
19
10
|
|
data/doc/ex/add_noise.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
#! /usr/local/bin/ruby -w
|
2
2
|
require 'RMagick'
|
3
|
-
include Magick
|
4
3
|
|
5
4
|
# Demonstrate the Image#add_noise method
|
6
|
-
NOISE_TYPES = [UniformNoise, GaussianNoise,
|
7
|
-
MultiplicativeGaussianNoise,
|
8
|
-
ImpulseNoise, LaplacianNoise,
|
9
|
-
PoissonNoise]
|
5
|
+
NOISE_TYPES = [Magick::UniformNoise, Magick::GaussianNoise,
|
6
|
+
Magick::MultiplicativeGaussianNoise,
|
7
|
+
Magick::ImpulseNoise, Magick::LaplacianNoise,
|
8
|
+
Magick::PoissonNoise]
|
10
9
|
|
11
10
|
img = Magick::Image.read('images/Flower_Hat.jpg').first
|
12
11
|
|
data/doc/ex/axes.rb
CHANGED
@@ -14,7 +14,7 @@ canvas.new_image(250, 250, Magick::HatchFill.new('white', 'gray90'))
|
|
14
14
|
border = Magick::Draw.new
|
15
15
|
border.stroke('thistle')
|
16
16
|
border.fill_opacity(0)
|
17
|
-
border.rectangle(0,0, canvas.
|
17
|
+
border.rectangle(0,0, canvas.rows-1, canvas.columns-1)
|
18
18
|
border.draw(canvas)
|
19
19
|
|
20
20
|
# Draw gold axes with arrow-heads.
|
data/doc/ex/bilevel_channel.rb
CHANGED
@@ -1,20 +1,9 @@
|
|
1
1
|
#! /usr/local/bin/ruby -w
|
2
2
|
|
3
3
|
require 'RMagick'
|
4
|
-
include Magick
|
5
|
-
|
6
|
-
img = Image.read('images/Flower_Hat.jpg').first
|
7
|
-
|
8
|
-
begin
|
9
|
-
|
10
|
-
result = img.bilevel_channel(2*MaxRGB/3, RedChannel)
|
11
|
-
|
12
|
-
# Substitute the standard "Not Implemented" image
|
13
|
-
rescue NotImplementedError
|
14
|
-
result = Magick::Image.read("images/notimplemented.gif").first
|
15
|
-
result.resize!(img.columns, img.rows)
|
16
|
-
end
|
17
4
|
|
5
|
+
img = Magick::Image.read('images/Flower_Hat.jpg').first
|
6
|
+
result = img.bilevel_channel(2*Magick::QuantumRange/3, Magick::RedChannel)
|
18
7
|
result.write('bilevel_channel.jpg')
|
19
8
|
exit
|
20
9
|
|
data/doc/ex/bounding_box.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
#! /usr/local/bin/ruby -w
|
2
2
|
require 'RMagick'
|
3
|
-
include Magick
|
4
3
|
|
5
|
-
img = Image.new(200,200) { self.background_color = "#ffffcc" }
|
4
|
+
img = Magick::Image.new(200,200) { self.background_color = "#ffffcc" }
|
6
5
|
|
7
6
|
# Draw a blue circle.
|
8
|
-
gc = Draw.new
|
7
|
+
gc = Magick::Draw.new
|
9
8
|
gc.stroke_width(5)
|
10
9
|
gc.stroke("blue")
|
11
10
|
gc.fill_opacity(0)
|
@@ -17,7 +16,7 @@ gc.draw(img)
|
|
17
16
|
# the corners with tiny red circles.
|
18
17
|
|
19
18
|
bb = img.bounding_box
|
20
|
-
gc = Draw.new
|
19
|
+
gc = Magick::Draw.new
|
21
20
|
gc.stroke("gray50")
|
22
21
|
gc.fill_opacity(0)
|
23
22
|
gc.rectangle(bb.x, bb.y, bb.x+bb.width, bb.y+bb.height)
|
data/doc/ex/channel.rb
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
#! /usr/local/bin/ruby -w
|
2
2
|
|
3
3
|
require 'RMagick'
|
4
|
-
include Magick
|
5
4
|
|
6
|
-
img = Image.read('images/Flower_Hat.jpg').first
|
7
|
-
imgs = ImageList.new
|
5
|
+
img = Magick::Image.read('images/Flower_Hat.jpg').first
|
6
|
+
imgs = Magick::ImageList.new
|
8
7
|
|
9
8
|
imgs << img
|
10
|
-
imgs << img.channel(RedChannel)
|
9
|
+
imgs << img.channel(Magick::RedChannel)
|
11
10
|
imgs.cur_image['Label'] = 'RedChannel'
|
12
|
-
imgs << img.channel(GreenChannel)
|
11
|
+
imgs << img.channel(Magick::GreenChannel)
|
13
12
|
imgs.cur_image['Label'] = 'GreenChannel'
|
14
|
-
imgs << img.channel(BlueChannel)
|
13
|
+
imgs << img.channel(Magick::BlueChannel)
|
15
14
|
imgs.cur_image['Label'] = 'BlueChannel'
|
16
15
|
|
17
16
|
result = imgs.montage {
|
@@ -19,7 +18,7 @@ result = imgs.montage {
|
|
19
18
|
self.background_color = 'black'
|
20
19
|
self.stroke = 'transparent'
|
21
20
|
self.fill = 'white'
|
22
|
-
self.geometry = Geometry.new(img.columns/2, img.rows/2, 5, 5)
|
21
|
+
self.geometry = Magick::Geometry.new(img.columns/2, img.rows/2, 5, 5)
|
23
22
|
}
|
24
23
|
|
25
24
|
result.write('channel.jpg')
|
data/doc/ex/clip_path.rb
CHANGED
@@ -26,12 +26,14 @@ girl.read("images/Flower_Hat.jpg")
|
|
26
26
|
cols = rows = nil
|
27
27
|
|
28
28
|
# Our final image is about 290 pixels wide, so here
|
29
|
-
# we widen our picture to fit.
|
29
|
+
# we widen our picture to fit. The change_geometry
|
30
|
+
# method will adjust the height proportionately.
|
30
31
|
|
31
|
-
girl.
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
girl.change_geometry("290") do |c,r|
|
33
|
+
pr.composite(0,0, c, r, girl)
|
34
|
+
cols = c
|
35
|
+
rows = r
|
36
|
+
end
|
35
37
|
|
36
38
|
pr.pop
|
37
39
|
|
@@ -48,6 +50,10 @@ canvas = canvas.blur_image(0, 20)
|
|
48
50
|
# Draw the star over the background
|
49
51
|
pr.draw(canvas)
|
50
52
|
|
53
|
+
# Crop away all the solid white border pixels.
|
54
|
+
crop = canvas.bounding_box
|
55
|
+
canvas.crop!(crop.x, crop.y, crop.width, crop.height)
|
56
|
+
|
51
57
|
canvas.write("clip_path.gif")
|
52
58
|
|
53
59
|
exit
|
data/doc/ex/color_histogram.rb
CHANGED
@@ -1,32 +1,21 @@
|
|
1
1
|
#! /usr/local/bin/ruby -w
|
2
2
|
|
3
3
|
require 'RMagick'
|
4
|
-
include Magick
|
5
4
|
|
6
5
|
NUM_COLORS = 256
|
7
6
|
HIST_HEIGHT = 200
|
8
7
|
|
9
|
-
img = Image.read('images/Hot_Air_Balloons_H.jpg').first
|
8
|
+
img = Magick::Image.read('images/Hot_Air_Balloons_H.jpg').first
|
10
9
|
img = img.quantize(NUM_COLORS)
|
11
10
|
|
12
|
-
|
13
|
-
hist = img.color_histogram
|
14
|
-
rescue NotImplementedError
|
15
|
-
img = Image.read('images/notimplemented.gif').first
|
16
|
-
img.write('color_histogram.gif')
|
17
|
-
exit
|
18
|
-
end
|
11
|
+
hist = img.color_histogram
|
19
12
|
|
20
13
|
# sort pixels by increasing count
|
21
|
-
|
22
|
-
pixels = hist.keys.sort_by {|pixel| hist[pixel] }
|
23
|
-
rescue NameError # No sort_by?
|
24
|
-
pixels = hist.keys.sort { |p, q| hist[p] <=> hist[q] }
|
25
|
-
end
|
14
|
+
pixels = hist.keys.sort_by {|pixel| hist[pixel] }
|
26
15
|
|
27
16
|
scale = HIST_HEIGHT / (hist.values.max*1.025) # put 2.5% air at the top
|
28
17
|
|
29
|
-
gc = Draw.new
|
18
|
+
gc = Magick::Draw.new
|
30
19
|
gc.stroke_width(1)
|
31
20
|
gc.affine(1, 0, 0, -scale, 0, HIST_HEIGHT)
|
32
21
|
|
@@ -39,21 +28,20 @@ pixels.each { |pixel|
|
|
39
28
|
start = start.succ
|
40
29
|
}
|
41
30
|
|
42
|
-
hatch = HatchFill.new("white", "gray95")
|
43
|
-
canvas = Image.new(NUM_COLORS, HIST_HEIGHT, hatch)
|
31
|
+
hatch = Magick::HatchFill.new("white", "gray95")
|
32
|
+
canvas = Magick::Image.new(NUM_COLORS, HIST_HEIGHT, hatch)
|
44
33
|
gc.draw(canvas)
|
45
34
|
|
46
|
-
text = Draw.new
|
35
|
+
text = Magick::Draw.new
|
47
36
|
text.annotate(canvas, 0, 0, 0, 20, "Color Frequency\nHistogram") {
|
48
37
|
self.pointsize = 10
|
49
|
-
self.gravity = NorthGravity
|
38
|
+
self.gravity = Magick::NorthGravity
|
50
39
|
self.stroke = 'transparent'
|
51
40
|
}
|
52
41
|
|
53
42
|
canvas.border!(1, 1, "white")
|
54
43
|
canvas.border!(1, 1, "black")
|
55
44
|
canvas.border!(3, 3, "white")
|
56
|
-
#canvas.display
|
57
45
|
canvas.write("color_histogram.gif")
|
58
46
|
|
59
47
|
exit
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
class Magick::ImageList
|
5
|
+
# Create a shadow image for each image in the list
|
6
|
+
def shadow(x_offset = 4, y_offset = 4, sigma = 4.0, opacity = 1.0)
|
7
|
+
return collect { |frame| frame.shadow(x_offset, y_offset, sigma, opacity) }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
ruby = Magick::ImageList.new
|
12
|
+
|
13
|
+
# Draw a rotating "Ruby" animation
|
14
|
+
gc = Magick::Draw.new
|
15
|
+
gc.gravity = Magick::CenterGravity
|
16
|
+
gc.pointsize = 24
|
17
|
+
gc.font_weight = Magick::BoldWeight
|
18
|
+
gc.fill = "darkred"
|
19
|
+
gc.stroke = "black"
|
20
|
+
gc.stroke_width = 1
|
21
|
+
|
22
|
+
23.times do
|
23
|
+
ruby << Magick::Image.new(100, 100) {self.background_color = "none"}
|
24
|
+
gc.annotate(ruby, 0, 0, 0, 0, "Ruby")
|
25
|
+
gc.rotation = 15
|
26
|
+
end
|
27
|
+
|
28
|
+
# Create a gradient background
|
29
|
+
bg = Magick::ImageList.new
|
30
|
+
bg.new_image(99, 99, Magick::GradientFill.new(50, 50, 50, 50, "white", "tan"))
|
31
|
+
bg.border!(1, 1, "black")
|
32
|
+
|
33
|
+
# Create the animated shadows of the rotating "Ruby" animation
|
34
|
+
shadows = ruby.shadow(2, 5, 3)
|
35
|
+
|
36
|
+
# Composite the shadow animation over the background. Since there is only one
|
37
|
+
# background image, it will replicated for each frame in the shadow animation.
|
38
|
+
begin
|
39
|
+
result = bg.composite_layers(shadows)
|
40
|
+
|
41
|
+
# Composite the "Ruby" animation over the previous composite
|
42
|
+
result = result.composite_layers(ruby)
|
43
|
+
result.delay = 10
|
44
|
+
result.write("composite_layers.gif")
|
45
|
+
result[0].write("composite_layers1.gif")
|
46
|
+
|
47
|
+
rescue NotImplementedError
|
48
|
+
result = Magick::Image.read('images/notimplemented.gif').first
|
49
|
+
result.resize!(100, 100)
|
50
|
+
result.write("composite_layers.gif")
|
51
|
+
result.write("composite_layers1.gif")
|
52
|
+
end
|
53
|
+
exit
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
# Demonstrate the Magick::Draw#fill_pattern and #stroke_pattern attributes.
|
5
|
+
|
6
|
+
temp = Magick::ImageList.new
|
7
|
+
temp << Magick::Image.new(5, 10) {self.background_color = "black"}
|
8
|
+
temp << Magick::Image.new(5, 10) {self.background_color = "gold"}
|
9
|
+
stroke_pattern = temp.append(false)
|
10
|
+
|
11
|
+
img = Magick::Image.new(280, 250) {self.background_color = "none"}
|
12
|
+
|
13
|
+
gc = Magick::Draw.new
|
14
|
+
gc.annotate(img, 0, 0, 0, 0, "PATT\nERNS") do
|
15
|
+
self.gravity = Magick::CenterGravity
|
16
|
+
self.font_weight = Magick::BoldWeight
|
17
|
+
self.pointsize = 100
|
18
|
+
self.fill_pattern = Magick::Image.read("images/Flower_Hat.jpg").first
|
19
|
+
self.stroke_width = 5
|
20
|
+
self.stroke_pattern = stroke_pattern
|
21
|
+
end
|
22
|
+
|
23
|
+
img.write("fill_pattern.gif")
|
24
|
+
|
25
|
+
|
26
|
+
|
@@ -1,53 +1,42 @@
|
|
1
1
|
#! /usr/local/bin/ruby -w
|
2
2
|
require 'RMagick'
|
3
3
|
|
4
|
-
include Magick
|
5
|
-
|
6
4
|
TEXT = 'get\nmultiline\ntype\nmetrics'
|
7
5
|
|
8
|
-
background = Image.new(200, 200)
|
9
|
-
gc = Draw.new
|
6
|
+
background = Magick::Image.new(200, 200)
|
7
|
+
gc = Magick::Draw.new
|
10
8
|
|
11
9
|
# Draw the text centered on the background
|
12
10
|
gc.annotate(background, 0, 0, 0, 0, TEXT) do
|
13
11
|
gc.font_family = 'Verdana'
|
14
12
|
gc.pointsize = 36
|
15
|
-
gc.gravity = CenterGravity
|
13
|
+
gc.gravity = Magick::CenterGravity
|
16
14
|
gc.stroke = 'none'
|
17
15
|
end
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
background.border!(1,1, 'blue')
|
44
|
-
|
45
|
-
# Substitute the standard "Not Implemented" image
|
46
|
-
rescue NotImplementedError
|
47
|
-
not_implemented = Magick::Image.read("images/notimplemented.gif").first
|
48
|
-
not_implemented.resize!(background.columns, background.rows)
|
49
|
-
background = not_implemented
|
50
|
-
end
|
17
|
+
# Get the metrics
|
18
|
+
metrics = gc.get_multiline_type_metrics(background, TEXT)
|
19
|
+
|
20
|
+
# Compute the corners for a rectangle surrounding the text
|
21
|
+
x = (background.columns - metrics.width) / 2
|
22
|
+
y = (background.rows - metrics.height) / 2
|
23
|
+
|
24
|
+
# Draw 2 rectangles over the text.
|
25
|
+
gc = Magick::Draw.new
|
26
|
+
gc.stroke('red')
|
27
|
+
gc.stroke_width(5)
|
28
|
+
gc.stroke_linejoin('round')
|
29
|
+
gc.fill('cyan')
|
30
|
+
gc.fill_opacity(0.10)
|
31
|
+
gc.rectangle(x, y, x+metrics.width, y+metrics.height)
|
32
|
+
|
33
|
+
gc.stroke('white')
|
34
|
+
gc.stroke_width(1)
|
35
|
+
gc.fill('none')
|
36
|
+
gc.rectangle(x, y, x+metrics.width, y+metrics.height)
|
37
|
+
gc.draw(background)
|
38
|
+
|
39
|
+
background.border!(1,1, 'blue')
|
51
40
|
|
52
41
|
background.write('get_multiline_type_metrics.gif')
|
53
42
|
|
data/doc/ex/get_type_metrics.rb
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
#! /usr/local/bin/ruby -w
|
2
2
|
require 'RMagick'
|
3
|
-
include Magick
|
4
3
|
|
5
4
|
# Add a method for drawing braces.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
5
|
+
module Magick
|
6
|
+
class Draw
|
7
|
+
|
8
|
+
# (w,h) - width & height of rectangle enclosing brace.
|
9
|
+
# Normally the brace is drawn with its opening to the
|
10
|
+
# left and its lower point on the origin.
|
11
|
+
#
|
12
|
+
# Set w < 0 to draw right-opening brace. Set h < 0 to
|
13
|
+
# position top point at origin.
|
14
|
+
#
|
15
|
+
# The placement & orientation is affected by the
|
16
|
+
# current user coordinate system.
|
17
|
+
def brace(w, h)
|
18
|
+
raise(ArgumentError, "width must be != 0") unless w != 0
|
19
|
+
raise(ArgumentError, "height must be != 0") unless h != 0
|
20
|
+
path("M0,0 Q#{w},0 #{w/2.0},#{-h/4.0} T#{w},#{-h/2.0}" +
|
21
|
+
"Q0,#{-h/2.0} #{w/2.0},#{-(3.0*h/4.0)} T0,#{-h}")
|
22
|
+
end
|
23
|
+
|
24
|
+
end # class Draw
|
25
|
+
end
|
26
26
|
|
27
27
|
|
28
28
|
|
@@ -31,11 +31,11 @@ Origin_y = 230
|
|
31
31
|
Glyph = 'g'
|
32
32
|
Face = ARGV[0] ? ARGV[0] : "Times"
|
33
33
|
|
34
|
-
canvas = Image.new(410,320,HatchFill.new('white', 'lightcyan2'))
|
34
|
+
canvas = Magick::Image.new(410, 320, Magick::HatchFill.new('white', 'lightcyan2'))
|
35
35
|
|
36
36
|
# Draw a big lowercase 'g' on the canvas. Leave room on all sides for
|
37
37
|
# the labels. Use 'undercolor' to set off the glyph.
|
38
|
-
glyph = Draw.new
|
38
|
+
glyph = Magick::Draw.new
|
39
39
|
glyph.annotate(canvas, 0, 0, Origin_x, Origin_y, Glyph) do
|
40
40
|
glyph.pointsize = 124
|
41
41
|
glyph.stroke = 'none'
|
@@ -47,7 +47,7 @@ end
|
|
47
47
|
# Call get_type_metrics. This is what this example's all about.
|
48
48
|
metrics = glyph.get_type_metrics(canvas, Glyph)
|
49
49
|
|
50
|
-
gc = Draw.new
|
50
|
+
gc = Magick::Draw.new
|
51
51
|
gc.translate(Origin_x, Origin_y)
|
52
52
|
|
53
53
|
# Draw the origin as a big red dot.
|
@@ -88,7 +88,7 @@ gc.draw(canvas)
|
|
88
88
|
|
89
89
|
# Draw the braces and labels. Position the braces by transforming the
|
90
90
|
# user coordinate system with translate and rotate methods.
|
91
|
-
gc = Draw.new
|
91
|
+
gc = Magick::Draw.new
|
92
92
|
gc.font_family('Times')
|
93
93
|
gc.pointsize(13)
|
94
94
|
gc.fill('none')
|