rmagick 1.7.1

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 (239) hide show
  1. data/ChangeLog +232 -0
  2. data/Makefile.in +28 -0
  3. data/README.html +404 -0
  4. data/README.txt +397 -0
  5. data/configure +8554 -0
  6. data/configure.ac +497 -0
  7. data/doc/comtasks.html +241 -0
  8. data/doc/constants.html +1195 -0
  9. data/doc/css/doc.css +299 -0
  10. data/doc/css/popup.css +34 -0
  11. data/doc/draw.html +3108 -0
  12. data/doc/ex/Adispatch.rb +43 -0
  13. data/doc/ex/Zconstitute.rb +9 -0
  14. data/doc/ex/adaptive_threshold.rb +19 -0
  15. data/doc/ex/add_noise.rb +18 -0
  16. data/doc/ex/affine.rb +48 -0
  17. data/doc/ex/affine_transform.rb +20 -0
  18. data/doc/ex/arc.rb +47 -0
  19. data/doc/ex/arcpath.rb +33 -0
  20. data/doc/ex/average.rb +15 -0
  21. data/doc/ex/axes.rb +64 -0
  22. data/doc/ex/bilevel_channel.rb +20 -0
  23. data/doc/ex/blur_image.rb +12 -0
  24. data/doc/ex/border.rb +10 -0
  25. data/doc/ex/bounding_box.rb +48 -0
  26. data/doc/ex/cbezier1.rb +40 -0
  27. data/doc/ex/cbezier2.rb +40 -0
  28. data/doc/ex/cbezier3.rb +40 -0
  29. data/doc/ex/cbezier4.rb +41 -0
  30. data/doc/ex/cbezier5.rb +41 -0
  31. data/doc/ex/cbezier6.rb +51 -0
  32. data/doc/ex/channel.rb +26 -0
  33. data/doc/ex/channel_threshold.rb +48 -0
  34. data/doc/ex/charcoal.rb +12 -0
  35. data/doc/ex/chop.rb +29 -0
  36. data/doc/ex/circle.rb +31 -0
  37. data/doc/ex/clip_path.rb +56 -0
  38. data/doc/ex/coalesce.rb +60 -0
  39. data/doc/ex/color_fill_to_border.rb +29 -0
  40. data/doc/ex/color_floodfill.rb +28 -0
  41. data/doc/ex/color_histogram.rb +60 -0
  42. data/doc/ex/color_reset.rb +11 -0
  43. data/doc/ex/colorize.rb +16 -0
  44. data/doc/ex/colors.rb +65 -0
  45. data/doc/ex/composite.rb +135 -0
  46. data/doc/ex/contrast.rb +37 -0
  47. data/doc/ex/crop.rb +31 -0
  48. data/doc/ex/crop_with_gravity.rb +46 -0
  49. data/doc/ex/cycle_colormap.rb +21 -0
  50. data/doc/ex/demo.rb +324 -0
  51. data/doc/ex/drawcomp.rb +42 -0
  52. data/doc/ex/drop_shadow.rb +60 -0
  53. data/doc/ex/edge.rb +11 -0
  54. data/doc/ex/ellipse.rb +43 -0
  55. data/doc/ex/emboss.rb +11 -0
  56. data/doc/ex/enhance.rb +28 -0
  57. data/doc/ex/equalize.rb +11 -0
  58. data/doc/ex/flatten_images.rb +38 -0
  59. data/doc/ex/flip.rb +11 -0
  60. data/doc/ex/flop.rb +11 -0
  61. data/doc/ex/fonts.rb +20 -0
  62. data/doc/ex/frame.rb +12 -0
  63. data/doc/ex/gaussian_blur.rb +11 -0
  64. data/doc/ex/get_multiline_type_metrics.rb +53 -0
  65. data/doc/ex/get_pixels.rb +48 -0
  66. data/doc/ex/get_type_metrics.rb +140 -0
  67. data/doc/ex/gradientfill.rb +27 -0
  68. data/doc/ex/grav.rb +44 -0
  69. data/doc/ex/gravity.rb +80 -0
  70. data/doc/ex/hatchfill.rb +27 -0
  71. data/doc/ex/images/Ballerina.jpg +0 -0
  72. data/doc/ex/images/Ballerina3.jpg +0 -0
  73. data/doc/ex/images/Button_0.gif +0 -0
  74. data/doc/ex/images/Button_1.gif +0 -0
  75. data/doc/ex/images/Button_2.gif +0 -0
  76. data/doc/ex/images/Button_3.gif +0 -0
  77. data/doc/ex/images/Button_4.gif +0 -0
  78. data/doc/ex/images/Button_5.gif +0 -0
  79. data/doc/ex/images/Button_6.gif +0 -0
  80. data/doc/ex/images/Button_7.gif +0 -0
  81. data/doc/ex/images/Button_8.gif +0 -0
  82. data/doc/ex/images/Button_9.gif +0 -0
  83. data/doc/ex/images/Button_A.gif +0 -0
  84. data/doc/ex/images/Button_B.gif +0 -0
  85. data/doc/ex/images/Button_C.gif +0 -0
  86. data/doc/ex/images/Button_D.gif +0 -0
  87. data/doc/ex/images/Button_E.gif +0 -0
  88. data/doc/ex/images/Button_F.gif +0 -0
  89. data/doc/ex/images/Button_G.gif +0 -0
  90. data/doc/ex/images/Button_H.gif +0 -0
  91. data/doc/ex/images/Button_I.gif +0 -0
  92. data/doc/ex/images/Button_J.gif +0 -0
  93. data/doc/ex/images/Button_K.gif +0 -0
  94. data/doc/ex/images/Button_L.gif +0 -0
  95. data/doc/ex/images/Button_M.gif +0 -0
  96. data/doc/ex/images/Button_N.gif +0 -0
  97. data/doc/ex/images/Button_O.gif +0 -0
  98. data/doc/ex/images/Button_P.gif +0 -0
  99. data/doc/ex/images/Button_Q.gif +0 -0
  100. data/doc/ex/images/Button_R.gif +0 -0
  101. data/doc/ex/images/Button_S.gif +0 -0
  102. data/doc/ex/images/Button_T.gif +0 -0
  103. data/doc/ex/images/Button_U.gif +0 -0
  104. data/doc/ex/images/Button_V.gif +0 -0
  105. data/doc/ex/images/Button_W.gif +0 -0
  106. data/doc/ex/images/Button_X.gif +0 -0
  107. data/doc/ex/images/Button_Y.gif +0 -0
  108. data/doc/ex/images/Button_Z.gif +0 -0
  109. data/doc/ex/images/Cheetah.jpg +0 -0
  110. data/doc/ex/images/Coffee.wmf +0 -0
  111. data/doc/ex/images/Flower_Hat.jpg +0 -0
  112. data/doc/ex/images/Gold_Statue.jpg +0 -0
  113. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  114. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  115. data/doc/ex/images/No.wmf +0 -0
  116. data/doc/ex/images/Polynesia.jpg +0 -0
  117. data/doc/ex/images/Red_Rocks.jpg +0 -0
  118. data/doc/ex/images/Shorts.jpg +0 -0
  119. data/doc/ex/images/Snake.wmf +0 -0
  120. data/doc/ex/images/Violin.jpg +0 -0
  121. data/doc/ex/images/graydient230x6.gif +0 -0
  122. data/doc/ex/images/logo400x83.gif +0 -0
  123. data/doc/ex/images/model.miff +0 -0
  124. data/doc/ex/images/notimplemented.gif +0 -0
  125. data/doc/ex/images/smile.miff +0 -0
  126. data/doc/ex/images/spin.gif +0 -0
  127. data/doc/ex/implode.rb +32 -0
  128. data/doc/ex/level.rb +12 -0
  129. data/doc/ex/level_channel.rb +33 -0
  130. data/doc/ex/line.rb +40 -0
  131. data/doc/ex/map.rb +28 -0
  132. data/doc/ex/map_f.rb +15 -0
  133. data/doc/ex/matte_fill_to_border.rb +42 -0
  134. data/doc/ex/matte_floodfill.rb +35 -0
  135. data/doc/ex/matte_replace.rb +42 -0
  136. data/doc/ex/median_filter.rb +28 -0
  137. data/doc/ex/modulate.rb +11 -0
  138. data/doc/ex/mono.rb +23 -0
  139. data/doc/ex/morph.rb +26 -0
  140. data/doc/ex/mosaic.rb +35 -0
  141. data/doc/ex/motion_blur.rb +11 -0
  142. data/doc/ex/negate.rb +11 -0
  143. data/doc/ex/negate_channel.rb +19 -0
  144. data/doc/ex/normalize.rb +11 -0
  145. data/doc/ex/oil_paint.rb +11 -0
  146. data/doc/ex/opacity.rb +38 -0
  147. data/doc/ex/opaque.rb +14 -0
  148. data/doc/ex/ordered_dither.rb +11 -0
  149. data/doc/ex/path.rb +62 -0
  150. data/doc/ex/pattern1.rb +25 -0
  151. data/doc/ex/pattern2.rb +26 -0
  152. data/doc/ex/polygon.rb +24 -0
  153. data/doc/ex/polyline.rb +23 -0
  154. data/doc/ex/posterize.rb +19 -0
  155. data/doc/ex/preview.rb +16 -0
  156. data/doc/ex/qbezierpath.rb +49 -0
  157. data/doc/ex/quantize-m.rb +25 -0
  158. data/doc/ex/radial_blur.rb +19 -0
  159. data/doc/ex/raise.rb +11 -0
  160. data/doc/ex/random_channel_threshold.rb +17 -0
  161. data/doc/ex/random_threshold_channel.rb +18 -0
  162. data/doc/ex/rectangle.rb +33 -0
  163. data/doc/ex/reduce_noise.rb +28 -0
  164. data/doc/ex/roll.rb +9 -0
  165. data/doc/ex/rotate.rb +43 -0
  166. data/doc/ex/rotate_f.rb +14 -0
  167. data/doc/ex/roundrect.rb +32 -0
  168. data/doc/ex/rubyname.rb +31 -0
  169. data/doc/ex/segment.rb +11 -0
  170. data/doc/ex/shade.rb +11 -0
  171. data/doc/ex/shave.rb +15 -0
  172. data/doc/ex/shear.rb +10 -0
  173. data/doc/ex/skewx.rb +50 -0
  174. data/doc/ex/skewy.rb +45 -0
  175. data/doc/ex/smile.rb +124 -0
  176. data/doc/ex/solarize.rb +11 -0
  177. data/doc/ex/splice.rb +16 -0
  178. data/doc/ex/spread.rb +11 -0
  179. data/doc/ex/stegano.rb +50 -0
  180. data/doc/ex/stroke_dasharray.rb +41 -0
  181. data/doc/ex/stroke_linecap.rb +44 -0
  182. data/doc/ex/stroke_linejoin.rb +48 -0
  183. data/doc/ex/stroke_width.rb +47 -0
  184. data/doc/ex/swirl.rb +17 -0
  185. data/doc/ex/text.rb +32 -0
  186. data/doc/ex/text_align.rb +36 -0
  187. data/doc/ex/text_antialias.rb +33 -0
  188. data/doc/ex/text_undercolor.rb +26 -0
  189. data/doc/ex/texture_fill_to_border.rb +34 -0
  190. data/doc/ex/texture_floodfill.rb +31 -0
  191. data/doc/ex/texturefill.rb +25 -0
  192. data/doc/ex/threshold.rb +13 -0
  193. data/doc/ex/to_blob.rb +14 -0
  194. data/doc/ex/translate.rb +37 -0
  195. data/doc/ex/transparent.rb +38 -0
  196. data/doc/ex/trim.rb +25 -0
  197. data/doc/ex/unsharp_mask.rb +28 -0
  198. data/doc/ex/viewex.rb +36 -0
  199. data/doc/ex/wave.rb +9 -0
  200. data/doc/ilist.html +1592 -0
  201. data/doc/image1.html +3009 -0
  202. data/doc/image2.html +2169 -0
  203. data/doc/image3.html +2815 -0
  204. data/doc/imageattrs.html +1319 -0
  205. data/doc/imusage.html +403 -0
  206. data/doc/index.html +418 -0
  207. data/doc/info.html +949 -0
  208. data/doc/magick.html +439 -0
  209. data/doc/scripts/doc.js +9 -0
  210. data/doc/struct.html +1334 -0
  211. data/doc/usage.html +1318 -0
  212. data/examples/describe.rb +44 -0
  213. data/examples/histogram.rb +289 -0
  214. data/examples/image_opacity.rb +29 -0
  215. data/examples/import_export.rb +31 -0
  216. data/examples/pattern_fill.rb +38 -0
  217. data/examples/rotating_text.rb +47 -0
  218. data/examples/thumbnail.rb +65 -0
  219. data/examples/vignette.rb +79 -0
  220. data/ext/RMagick/MANIFEST +239 -0
  221. data/ext/RMagick/extconf.rb.in +21 -0
  222. data/ext/RMagick/rmagick.h +938 -0
  223. data/ext/RMagick/rmagick_config.h.in +170 -0
  224. data/ext/RMagick/rmdraw.c +1308 -0
  225. data/ext/RMagick/rmfill.c +609 -0
  226. data/ext/RMagick/rmilist.c +685 -0
  227. data/ext/RMagick/rmimage.c +7980 -0
  228. data/ext/RMagick/rminfo.c +982 -0
  229. data/ext/RMagick/rmmain.c +1497 -0
  230. data/ext/RMagick/rmutil.c +2685 -0
  231. data/install.rb +1015 -0
  232. data/lib/RMagick.rb +1486 -0
  233. data/metaconfig.in +6 -0
  234. data/post-clean.rb +12 -0
  235. data/post-install.rb +36 -0
  236. data/post-setup.rb +245 -0
  237. data/rmagick.gemspec +22 -0
  238. data/uninstall.rb +71 -0
  239. metadata +286 -0
data/doc/ex/edge.rb ADDED
@@ -0,0 +1,11 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#edge method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img = img.edge(5)
9
+
10
+ img.write('edge.jpg')
11
+ exit
data/doc/ex/ellipse.rb ADDED
@@ -0,0 +1,43 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ imgl = Magick::ImageList.new
5
+ imgl.new_image(360, 250, Magick::HatchFill.new('white','LightCyan2'))
6
+
7
+ gc = Magick::Draw.new
8
+
9
+ gc.fill_opacity(0)
10
+ gc.stroke('red').stroke_width(3)
11
+
12
+ # Draw ellipse
13
+ gc.ellipse(180,125, 150,75, 0, 270)
14
+
15
+ # Draw horizontal width line
16
+ gc.stroke('gray50').stroke_width(1)
17
+ gc.line(180-150, 125, 180, 125)
18
+
19
+ # Draw vertical height line
20
+ gc.line(180, 125-75, 180, 125)
21
+ gc.fill_opacity(0)
22
+
23
+ # Draw arcStart circle
24
+ gc.circle(180+150, 125, 180+150+3, 125+3)
25
+
26
+ # Draw arcEnd circle
27
+ gc.circle(180, 125-75, 180+3, 125-75+3)
28
+
29
+ # Annotate
30
+ gc.fill_opacity(1)
31
+ gc.circle(180,125, 183,128)
32
+ gc.fill('black')
33
+ gc.stroke('transparent')
34
+ gc.text(187,125, "'180,125'")
35
+ gc.text(253, 118, "'Start 0 degrees'")
36
+ gc.text(187, 50, "'End 270 degrees'")
37
+ gc.text(120, 100, "'Height=75'")
38
+ gc.text(85, 140, "'Width=150'")
39
+ gc.draw(imgl)
40
+
41
+ imgl.border!(1,1, "LightCyan2")
42
+
43
+ imgl.write("ellipse.gif")
data/doc/ex/emboss.rb ADDED
@@ -0,0 +1,11 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#edge method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img = img.emboss
9
+
10
+ img.write('emboss.jpg')
11
+ exit
data/doc/ex/enhance.rb ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#enhance method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+ img = img.add_noise(Magick::UniformNoise)
8
+
9
+ eimg = img.enhance
10
+
11
+ # Zoom in so we can see the change
12
+ img.resize!(3)
13
+ eimg.resize!(3)
14
+
15
+ # Make a before-and-after composite
16
+ eimg.crop!(Magick::EastGravity, eimg.columns/2, eimg.rows)
17
+ img = img.composite(eimg, Magick::EastGravity, Magick::OverCompositeOp)
18
+
19
+ # Draw a black line between the before and after parts.
20
+ line = Magick::Draw.new
21
+ line.line(img.columns/2, 0, img.columns/2, img.rows)
22
+ line.draw(img)
23
+
24
+ # Crop everything but the face.
25
+ img.crop!(Magick::CenterGravity, 250, 200)
26
+
27
+ img.write('enhance.jpg')
28
+ exit
@@ -0,0 +1,11 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#equalize method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img = img.equalize
9
+
10
+ img.write('equalize.jpg')
11
+ exit
@@ -0,0 +1,38 @@
1
+ #! /usr/local/bin/ruby -w
2
+
3
+ # Demonstrate flatten_images method. Create an image with a drop-shadow effect.
4
+
5
+ require 'RMagick'
6
+
7
+ RMagick = 'RMagick'
8
+
9
+ i = Magick::ImageList.new
10
+
11
+ # Create a background image with a gradient fill
12
+ i.new_image(200, 100, Magick::GradientFill.new(100,50, 100, 50, "khaki1", "turquoise"))
13
+
14
+ # Create a transparent image for the text shadow
15
+ i.new_image(200, 100) { self.background_color = 'transparent' }
16
+ primitives = Magick::Draw.new
17
+ primitives.annotate i, 0, 0, 2, 2, RMagick do
18
+ self.pointsize = 32
19
+ self.font = "Helvetica"
20
+ self.fill = "gray50"
21
+ self.gravity = Magick::CenterGravity
22
+ end
23
+
24
+ # Create another transparent image for the text itself
25
+ i.new_image(200, 100) { self.background_color = 'transparent' }
26
+ primitives = Magick::Draw.new
27
+ primitives.annotate i, 0, 0, -2, -2, RMagick do
28
+ self.pointsize = 32
29
+ self.font = "Helvetica"
30
+ self.fill = "red"
31
+ self.stroke = "black"
32
+ self.gravity = Magick::CenterGravity
33
+ end
34
+
35
+ # Flatten all 3 into a single image.
36
+ # i.display
37
+ i.flatten_images.write "flatten_images.gif"
38
+ exit
data/doc/ex/flip.rb ADDED
@@ -0,0 +1,11 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#flip method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img.flip!
9
+
10
+ img.write('flip.jpg')
11
+ exit
data/doc/ex/flop.rb ADDED
@@ -0,0 +1,11 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#flop method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img.flop!
9
+
10
+ img.write('flop.jpg')
11
+ exit
data/doc/ex/fonts.rb ADDED
@@ -0,0 +1,20 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Compute column widths
5
+ name_length = 0
6
+ family_length = 0
7
+ Magick::fonts { |font|
8
+ if font.name.length > name_length
9
+ name_length = font.name.length
10
+ end
11
+ if font.family.length > family_length
12
+ family_length = font.family.length
13
+ end
14
+ }
15
+
16
+ # Print all fonts
17
+ Magick::fonts { |font|
18
+ printf("%-*s %-*s %d %s\t%s\n", name_length, font.name,
19
+ family_length, font.family, font.weight, font.style, font.stretch)
20
+ }
data/doc/ex/frame.rb ADDED
@@ -0,0 +1,12 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#frame method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img.matte_color="gray75"
9
+ img = img.frame
10
+
11
+ img.write('frame.jpg')
12
+ exit
@@ -0,0 +1,11 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#gaussian_blur method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img = img.gaussian_blur(0.0, 3.0)
9
+
10
+ img.write('gaussian_blur.jpg')
11
+ exit
@@ -0,0 +1,53 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ include Magick
5
+
6
+ TEXT = 'get\nmultiline\ntype\nmetrics'
7
+
8
+ background = Image.new(200, 200)
9
+ gc = Draw.new
10
+
11
+ # Draw the text centered on the background
12
+ gc.annotate(background, 0, 0, 0, 0, TEXT) do |gc|
13
+ gc.font_family = 'Verdana'
14
+ gc.pointsize = 36
15
+ gc.gravity = CenterGravity
16
+ gc.stroke = 'none'
17
+ end
18
+
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
51
+
52
+ background.write('get_multiline_type_metrics.gif')
53
+
@@ -0,0 +1,48 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate partial transparency and the get_pixels and
5
+ # store_pixels methods by creating an image that goes from
6
+ # full-color on the left to monochrome on the right.
7
+
8
+ # Read the colorful picture of a rock formation. Scale
9
+ # it to 300 pixels high because we don't want a big picture.
10
+ rocks = Magick::Image.read('images/Red_Rocks.jpg').first
11
+ rocks.scale!(250.0/rocks.rows)
12
+
13
+ # Make a monochrome copy. See Image#quantize for details
14
+ grayrocks = rocks.quantize(256, Magick::GRAYColorspace)
15
+
16
+ rows = grayrocks.rows
17
+ cols = grayrocks.columns
18
+
19
+ # Create an array of opacity values, proceeding from
20
+ # transparent to opaque. The array should have as many
21
+ # elements as there are columns in the image. The first
22
+ # element should be TransparentOpacity and each succeeding
23
+ # element slightly more opaque than its predecessor.
24
+ step = Magick::TransparentOpacity / cols.to_f
25
+ opacity_steps = Array.new(cols)
26
+ cols.times { |x|
27
+ opacity_steps[x] = Magick::TransparentOpacity - Integer(x * step)
28
+ if opacity_steps[x] < Magick::OpaqueOpacity
29
+ opacity_steps[x] = Magick::OpaqueOpacity
30
+ end
31
+ }
32
+
33
+ # Get each row of pixels from the mono image.
34
+ # Copy the pre-computed opacity values to the pixels.
35
+ # Store the pixels back.
36
+ rows.times { |y|
37
+ pixels = grayrocks.get_pixels(0, y, cols, 1)
38
+ pixels.each_with_index { |p,x| p.opacity = opacity_steps[x] }
39
+ grayrocks.store_pixels(0, y, cols, 1, pixels)
40
+ }
41
+
42
+ # Composite the mono version of the image over the color version.
43
+ grayrocks.matte = true
44
+ combine = rocks.composite(grayrocks, Magick::CenterGravity, Magick::OverCompositeOp)
45
+ #combine.display
46
+ combine.write 'get_pixels.jpg'
47
+ exit
48
+
@@ -0,0 +1,140 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+ include Magick
4
+
5
+ # 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
+
26
+
27
+
28
+
29
+ Origin_x = 110
30
+ Origin_y = 220
31
+ Glyph = 'g'
32
+
33
+ canvas = Image.new(410,300,HatchFill.new('white', 'lightcyan2'))
34
+
35
+ # Draw a big lowercase 'g' on the canvas. Leave room on all sides for
36
+ # the labels. Use 'undercolor' to set off the glyph.
37
+ glyph = Draw.new
38
+ glyph.annotate(canvas, 0, 0, Origin_x, Origin_y, Glyph) do |opts|
39
+ opts.pointsize = 124
40
+ opts.stroke = 'none'
41
+ opts.fill = 'black'
42
+ opts.font_family = 'Times'
43
+ opts.undercolor = '#ffff00c0'
44
+ end
45
+
46
+ # Call get_type_metrics. This is what this example's all about.
47
+ metrics = glyph.get_type_metrics(canvas, Glyph)
48
+
49
+ gc = Draw.new
50
+
51
+ # Draw the origin as a big red dot.
52
+ gc.stroke('red')
53
+ gc.fill('red')
54
+ gc.circle(Origin_x, Origin_y, Origin_x, Origin_y+2)
55
+
56
+ # All our lines will be medium-gray, dashed, and thin.
57
+ gc.stroke('gray50')
58
+ gc.stroke_dasharray(5,2)
59
+ gc.stroke_width(1)
60
+ gc.fill('none')
61
+
62
+ # baseline
63
+ gc.line(Origin_x-10, Origin_y, Origin_x+metrics.width+20, Origin_y)
64
+
65
+ # a vertical line through the origin
66
+ gc.line(Origin_x, 30, Origin_x, 270)
67
+
68
+ # descent
69
+ gc.line(Origin_x-10, Origin_y-metrics.descent, Origin_x+metrics.width+20, Origin_y-metrics.descent)
70
+
71
+ # ascent
72
+ gc.line(Origin_x-10, Origin_y-metrics.ascent, Origin_x+metrics.width+20, Origin_y-metrics.ascent)
73
+
74
+ # height
75
+ gc.line(Origin_x-10, Origin_y-metrics.height, Origin_x+metrics.width+10, Origin_y-metrics.height)
76
+
77
+ # width
78
+ gc.line(Origin_x+metrics.width, 30, Origin_x+metrics.width, 270)
79
+
80
+ # max_advance
81
+ gc.line(Origin_x+metrics.max_advance, Origin_y-metrics.descent-10,
82
+ Origin_x+metrics.max_advance, 270)
83
+
84
+ gc.draw(canvas)
85
+
86
+ # Draw the braces and labels. Position the braces by transforming the
87
+ # user coordinate system with translate and rotate methods.
88
+ gc = Draw.new
89
+ gc.font_family('Times')
90
+ gc.pointsize(13)
91
+ gc.fill('none')
92
+ gc.stroke('black')
93
+ gc.stroke_width(1)
94
+
95
+ # between origin and descent
96
+ gc.push
97
+ gc.translate(Origin_x+metrics.width+23, Origin_y)
98
+ gc.brace(10, metrics.descent)
99
+ gc.pop
100
+
101
+ # between origin and ascent
102
+ gc.push
103
+ gc.translate(Origin_x+metrics.width+23, Origin_y)
104
+ gc.brace(10, metrics.ascent)
105
+ gc.pop
106
+
107
+ # between origin and height
108
+ gc.push
109
+ gc.translate(Origin_x-13, Origin_y-metrics.height)
110
+ gc.rotate(180)
111
+ gc.brace(10, metrics.height)
112
+ gc.pop
113
+
114
+ # between origin and width
115
+ gc.push
116
+ gc.translate(Origin_x+metrics.width, 27.0)
117
+ gc.rotate(-90)
118
+ gc.brace(10, metrics.width)
119
+ gc.pop
120
+
121
+ # between origin and max_advance
122
+ gc.push
123
+ gc.translate(Origin_x, Origin_y-metrics.descent+14)
124
+ gc.rotate(90)
125
+ gc.brace(10, metrics.max_advance)
126
+ gc.pop
127
+
128
+ # Add labels
129
+ gc.stroke('none')
130
+ gc.fill('black')
131
+ gc.text(Origin_x+metrics.width+40, Origin_y-(metrics.ascent/2)+4, 'ascent')
132
+ gc.text(Origin_x+metrics.width+40, Origin_y-(metrics.descent/2)+4, 'descent')
133
+ gc.text(Origin_x-60, Origin_y-metrics.height/2+4, 'height')
134
+ gc.text(Origin_x+(metrics.width/2)-15, 15, 'width')
135
+ gc.text(Origin_x+(metrics.max_advance)/2-38, 290, "max_advance")
136
+
137
+ gc.draw(canvas)
138
+ canvas.border!(1,1,'blue')
139
+ canvas.write('get_type_metrics.gif')
140
+