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.

Files changed (108) hide show
  1. data/ChangeLog +78 -25
  2. data/README.html +117 -188
  3. data/README.txt +116 -181
  4. data/build_tarball.rake +205 -0
  5. data/doc/comtasks.html +2 -2
  6. data/doc/constants.html +118 -44
  7. data/doc/draw.html +57 -99
  8. data/doc/ex/adaptive_threshold.rb +1 -10
  9. data/doc/ex/add_noise.rb +4 -5
  10. data/doc/ex/axes.rb +1 -1
  11. data/doc/ex/bilevel_channel.rb +2 -13
  12. data/doc/ex/bounding_box.rb +3 -4
  13. data/doc/ex/channel.rb +6 -7
  14. data/doc/ex/clip_path.rb +11 -5
  15. data/doc/ex/color_histogram.rb +8 -20
  16. data/doc/ex/composite_layers.rb +53 -0
  17. data/doc/ex/fill_pattern.rb +26 -0
  18. data/doc/ex/get_multiline_type_metrics.rb +26 -37
  19. data/doc/ex/get_type_metrics.rb +25 -25
  20. data/doc/ex/images/notimplemented.gif +0 -0
  21. data/doc/ex/level.rb +1 -1
  22. data/doc/ex/matte_floodfill.rb +5 -6
  23. data/doc/ex/matte_replace.rb +5 -6
  24. data/doc/ex/negate_channel.rb +0 -10
  25. data/doc/ex/opacity.rb +3 -5
  26. data/doc/ex/polaroid.rb +4 -1
  27. data/doc/ex/posterize.rb +1 -12
  28. data/doc/ex/preview.rb +1 -8
  29. data/doc/ex/radial_blur.rb +1 -11
  30. data/doc/ex/raise.rb +1 -4
  31. data/doc/ex/random_threshold_channel.rb +4 -9
  32. data/doc/ex/sepiatone.rb +2 -9
  33. data/doc/ex/shadow.rb +12 -18
  34. data/doc/ex/sketch.rb +2 -9
  35. data/doc/ex/smile.rb +7 -7
  36. data/doc/ex/splice.rb +3 -10
  37. data/doc/ex/stegano.rb +5 -0
  38. data/doc/ex/threshold.rb +2 -2
  39. data/doc/ex/transpose.rb +1 -8
  40. data/doc/ex/transverse.rb +1 -8
  41. data/doc/ex/trim.rb +1 -2
  42. data/doc/ex/viewex.rb +4 -5
  43. data/doc/ex/vignette.rb +1 -8
  44. data/doc/ex/watermark.rb +1 -0
  45. data/doc/ex/wet_floor.rb +8 -14
  46. data/doc/ilist.html +301 -110
  47. data/doc/image1.html +362 -258
  48. data/doc/image2.html +429 -286
  49. data/doc/image3.html +418 -192
  50. data/doc/imageattrs.html +100 -39
  51. data/doc/imusage.html +26 -21
  52. data/doc/index.html +52 -93
  53. data/doc/info.html +160 -64
  54. data/doc/magick.html +37 -71
  55. data/doc/optequiv.html +155 -61
  56. data/doc/rvg.html +3 -3
  57. data/doc/rvgclip.html +2 -2
  58. data/doc/rvggroup.html +2 -2
  59. data/doc/rvgimage.html +3 -3
  60. data/doc/rvgpattern.html +3 -3
  61. data/doc/rvgshape.html +2 -2
  62. data/doc/rvgstyle.html +2 -2
  63. data/doc/rvgtext.html +2 -2
  64. data/doc/rvgtspan.html +4 -4
  65. data/doc/rvgtut.html +4 -4
  66. data/doc/rvguse.html +3 -3
  67. data/doc/rvgxform.html +2 -2
  68. data/doc/struct.html +26 -29
  69. data/doc/usage.html +99 -48
  70. data/examples/crop_with_gravity.rb +46 -0
  71. data/examples/demo.rb +2 -2
  72. data/examples/histogram.rb +11 -11
  73. data/examples/identify.rb +45 -45
  74. data/examples/spinner.rb +3 -2
  75. data/ext/RMagick/MANIFEST +7 -8
  76. data/ext/RMagick/extconf.rb +242 -0
  77. data/ext/RMagick/rmagick.h +136 -222
  78. data/ext/RMagick/rmdraw.c +226 -229
  79. data/ext/RMagick/rmfill.c +69 -118
  80. data/ext/RMagick/rmilist.c +234 -94
  81. data/ext/RMagick/rmimage.c +1719 -2564
  82. data/ext/RMagick/rminfo.c +433 -619
  83. data/ext/RMagick/rmmain.c +249 -487
  84. data/ext/RMagick/rmutil.c +344 -563
  85. data/lib/RMagick.rb +414 -358
  86. data/lib/rvg/clippath.rb +2 -2
  87. data/lib/rvg/container.rb +2 -2
  88. data/lib/rvg/describable.rb +2 -2
  89. data/lib/rvg/embellishable.rb +2 -2
  90. data/lib/rvg/misc.rb +3 -3
  91. data/lib/rvg/paint.rb +2 -7
  92. data/lib/rvg/pathdata.rb +2 -2
  93. data/lib/rvg/rvg.rb +2 -2
  94. data/lib/rvg/stretchable.rb +2 -14
  95. data/lib/rvg/stylable.rb +2 -2
  96. data/lib/rvg/text.rb +2 -2
  97. data/lib/rvg/transformable.rb +2 -2
  98. data/lib/rvg/units.rb +2 -2
  99. data/{metaconfig.in → metaconfig} +0 -1
  100. data/post-setup.rb +1 -1
  101. data/rmagick.gemspec +6 -9
  102. metadata +41 -49
  103. data/Makefile.in +0 -42
  104. data/configure +0 -12358
  105. data/configure.ac +0 -791
  106. data/ext/RMagick/extconf.rb.in +0 -25
  107. data/ext/RMagick/rmagick_config.h.in +0 -285
  108. 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
 
@@ -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
 
@@ -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.columns-1, canvas.rows-1)
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.
@@ -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
 
@@ -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)
@@ -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')
@@ -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.resize!(290.0/girl.columns)
32
- cols = girl.columns
33
- rows = girl.rows
34
- pr.composite(0, 0, cols, rows, girl)
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
@@ -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
- begin
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
- begin
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
- begin
20
-
21
- # Get the metrics
22
- metrics = gc.get_multiline_type_metrics(background, TEXT)
23
-
24
- # Compute the corners for a rectangle surrounding the text
25
- x = (background.columns - metrics.width) / 2
26
- y = (background.rows - metrics.height) / 2
27
-
28
- # Draw 2 rectangles over the text.
29
- gc = Draw.new
30
- gc.stroke('red')
31
- gc.stroke_width(5)
32
- gc.stroke_linejoin('round')
33
- gc.fill('cyan')
34
- gc.fill_opacity(0.10)
35
- gc.rectangle(x, y, x+metrics.width, y+metrics.height)
36
-
37
- gc.stroke('white')
38
- gc.stroke_width(1)
39
- gc.fill('none')
40
- gc.rectangle(x, y, x+metrics.width, y+metrics.height)
41
- gc.draw(background)
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
 
@@ -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
- 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
-
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')