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
@@ -0,0 +1,40 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ imgl = Magick::ImageList.new
5
+ imgl.new_image(470, 150, Magick::HatchFill.new('white','lightcyan2'))
6
+ gc = Magick::Draw.new
7
+
8
+ # Draw Bezier curve
9
+ gc.stroke('red')
10
+ gc.stroke_width(3)
11
+ gc.fill_opacity(0)
12
+ gc.bezier(25,125, 100,25, 400,25, 325,125)
13
+
14
+ # Draw circles around end points
15
+ gc.fill_opacity(0)
16
+ gc.stroke('gray50').stroke_width(1)
17
+ gc.circle(25,125, 28, 128)
18
+ gc.circle(325,125, 328, 123)
19
+
20
+ # Draw filled circles around control points
21
+ gc.line(25,125, 100,25)
22
+ gc.line(325,125, 400,25)
23
+ gc.fill_opacity(1)
24
+ gc.fill('gray50')
25
+ gc.circle(100,25, 103,28)
26
+ gc.circle(400,25, 403,28)
27
+
28
+ # Annotate
29
+ gc.fill('black')
30
+ gc.stroke('transparent')
31
+ gc.text(34,125, "'25,125'")
32
+ gc.text(107,25, "'100,25'")
33
+ gc.text(335,125, "'325,125'")
34
+ gc.text(405,25, "'400,25'")
35
+
36
+ gc.draw(imgl)
37
+ imgl.border!(1,1, "lightcyan2")
38
+ imgl.write('cbezier2.gif')
39
+ exit(0)
40
+
@@ -0,0 +1,40 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ imgl = Magick::ImageList.new
5
+ imgl.new_image(540, 200, Magick::HatchFill.new('white','lightcyan2'))
6
+ gc = Magick::Draw.new
7
+
8
+ # Draw Bezier curve
9
+ gc.stroke('red')
10
+ gc.stroke_width(3)
11
+ gc.fill_opacity(0)
12
+ gc.bezier(100,150, 25,50, 475, 50, 400,150)
13
+
14
+ # Draw circles around endpoints
15
+ gc.fill_opacity(0)
16
+ gc.stroke('gray50').stroke_width(1)
17
+ gc.circle(100,150, 103, 153)
18
+ gc.circle(400,150, 403, 153)
19
+ gc.line(100,150, 25,50)
20
+ gc.line(400,150, 475,50)
21
+
22
+ # Draw filled circles around control points
23
+ gc.fill_opacity(1)
24
+ gc.fill('gray50')
25
+ gc.circle(25,50, 28,53)
26
+ gc.circle(475,50, 478,53)
27
+
28
+ # Annotate
29
+ gc.fill('black')
30
+ gc.stroke('transparent')
31
+ gc.text(107,150, "'100,150'")
32
+ gc.text(30,50, "'25,50'")
33
+ gc.text(409,150, "'400,150'")
34
+ gc.text(480,50, "'475,50'")
35
+
36
+ gc.draw(imgl)
37
+ imgl.border!(1,1, "lightcyan2")
38
+ imgl.write('cbezier3.gif')
39
+ exit(0)
40
+
@@ -0,0 +1,41 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ imgl = Magick::ImageList.new
5
+ imgl.new_image(390, 360, Magick::HatchFill.new('white','lightcyan2'))
6
+ gc = Magick::Draw.new
7
+
8
+ # Draw Bezier curve
9
+ gc.stroke('red')
10
+ gc.stroke_width(3)
11
+ gc.fill_opacity(0)
12
+ gc.bezier(20,180, 20,30, 320, 330, 320,180)
13
+
14
+ # Draw circles around endpoints
15
+ gc.fill_opacity(0)
16
+ gc.stroke('gray50').stroke_width(1)
17
+ gc.circle(20,180, 23, 183)
18
+ gc.circle(320,180, 323, 183)
19
+
20
+ # Draw filled circles around control points
21
+ gc.line(20,180, 20,30)
22
+ gc.line(320,180, 320,330)
23
+ gc.fill_opacity(1)
24
+ gc.fill('gray50')
25
+ gc.circle(20,30, 23,33)
26
+ gc.circle(320,330, 323,333)
27
+
28
+ # Annotate
29
+ gc.fill('black')
30
+ gc.stroke('transparent')
31
+ gc.text(29,180, "'20,180'")
32
+ gc.text(29,33, "'20,30'")
33
+ gc.text(329,330, "'320,330'")
34
+ gc.text(329,180, "'320,180'")
35
+
36
+ gc.draw(imgl)
37
+ imgl.border!(1,1, "lightcyan2")
38
+
39
+ imgl.write('cbezier4.gif')
40
+ exit(0)
41
+
@@ -0,0 +1,41 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ imgl = Magick::ImageList.new
5
+ imgl.new_image(390, 150, Magick::HatchFill.new('white','lightcyan2'))
6
+ gc = Magick::Draw.new
7
+
8
+ # Draw Bezier curve
9
+ gc.stroke('red')
10
+ gc.stroke_width(3)
11
+ gc.fill_opacity(0)
12
+ gc.bezier(20,120, 95,20, 245,20, 320,120)
13
+
14
+ # Draw circles around endpoints
15
+ gc.fill_opacity(0)
16
+ gc.stroke('gray50').stroke_width(1)
17
+ gc.circle(20,120, 23, 123)
18
+ gc.circle(320,120, 323, 123)
19
+
20
+ # Draw filled circles around control points
21
+ gc.line(20,120, 95,20)
22
+ gc.line(320,120, 245,20)
23
+ gc.fill_opacity(1)
24
+ gc.fill('gray50')
25
+ gc.circle(95,20, 98,23)
26
+ gc.circle(245,20, 248,23)
27
+
28
+ # Annotate
29
+ gc.fill('black')
30
+ gc.stroke('transparent')
31
+ gc.text(29,120, "'20,120'")
32
+ gc.text(104,20, "'95,20'")
33
+ gc.text(254,20, "'245,20'")
34
+ gc.text(329,120, "'320,120'")
35
+
36
+ gc.draw(imgl)
37
+ imgl.border!(1,1, 'lightcyan2')
38
+
39
+ imgl.write('cbezier5.gif')
40
+ exit(0)
41
+
@@ -0,0 +1,51 @@
1
+ #! /usr/local/bin/ruby -w
2
+
3
+ require 'RMagick'
4
+
5
+ imgl = Magick::ImageList.new
6
+ imgl.new_image(400, 300, Magick::HatchFill.new('white','lightcyan2'))
7
+
8
+ gc = Magick::Draw.new
9
+
10
+ # Draw Bezier curve
11
+ gc.stroke('red')
12
+ gc.stroke_width(2)
13
+ gc.fill_opacity(0)
14
+ gc.bezier(50,150, 50,50, 200,50, 200,150, 200,250, 350,250, 350,150)
15
+
16
+ # Draw filled circles for the control points
17
+ gc.fill('gray50')
18
+ gc.stroke('gray50')
19
+ gc.fill_opacity(1)
20
+ gc.circle(50,50, 53,53)
21
+ gc.circle(200,50, 203,53)
22
+ gc.circle(200,250, 203,253)
23
+ gc.circle(350,250, 353,253)
24
+
25
+ # Draw circles on the points the curve passes through
26
+ gc.fill_opacity(0)
27
+ gc.circle(50,150, 53,153)
28
+ gc.circle(200,150, 203,153)
29
+ gc.circle(350,150, 353,153)
30
+
31
+ # Draw the gray lines between points and control points
32
+ gc.line(50,50, 50,150)
33
+ gc.line(200,50, 200,250)
34
+ gc.line(350,150, 350,250)
35
+
36
+ # Annotate
37
+ gc.fill('black')
38
+ gc.stroke('transparent')
39
+ gc.text(30,170, "'50,150'")
40
+ gc.text(30, 40, "'50,50'")
41
+ gc.text(180,40, "'200,50'")
42
+ gc.text(210,155,"'200,150'")
43
+ gc.text(180,270,"'200,250'")
44
+ gc.text(330,270,"'350,250'")
45
+ gc.text(330,140,"'350,150'")
46
+ gc.draw(imgl)
47
+
48
+ imgl.border!(1,1, 'lightcyan2')
49
+
50
+ imgl.write("cbezier6.gif")
51
+ exit
data/doc/ex/channel.rb ADDED
@@ -0,0 +1,26 @@
1
+ #! /usr/local/bin/ruby -w
2
+
3
+ require 'RMagick'
4
+ include Magick
5
+
6
+ img = Image.read('images/Flower_Hat.jpg').first
7
+ imgs = ImageList.new
8
+
9
+ imgs << img
10
+ imgs << img.channel(RedChannel)
11
+ imgs.cur_image['Label'] = 'RedChannel'
12
+ imgs << img.channel(GreenChannel)
13
+ imgs.cur_image['Label'] = 'GreenChannel'
14
+ imgs << img.channel(BlueChannel)
15
+ imgs.cur_image['Label'] = 'BlueChannel'
16
+
17
+ result = imgs.montage {
18
+ self.tile = "2x2"
19
+ self.background_color = 'black'
20
+ self.stroke = 'transparent'
21
+ self.fill = 'white'
22
+ self.geometry = Geometry.new(img.columns/2, img.rows/2, 5, 5)
23
+ }
24
+
25
+ result.write('channel.jpg')
26
+
@@ -0,0 +1,48 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#channel_threshold method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ # Make the "before" image
9
+ imgs = Magick::ImageList.new
10
+ imgs << img.copy
11
+ imgs.cur_image['Label'] = "\n\n"
12
+ imgs << img.copy
13
+ imgs.cur_image['Label'] = "\n\n\n"
14
+
15
+ montage = imgs.montage {
16
+ self.background_color = "white"
17
+ self.geometry = "#{img.columns}x#{img.rows}+10+10"
18
+ self.tile = "2x1"
19
+ }
20
+ montage.border!(1,1,"black")
21
+ montage.write("channel_threshold_before.jpg")
22
+
23
+ # Now the "after" image.
24
+ # Channel threshold values should be a %-age of MaxRGB
25
+ # Let the opacity threshold default to MaxRGB.
26
+ img2 = img.channel_threshold(Magick::MaxRGB*0.75,
27
+ Magick::MaxRGB*0.50)
28
+ img2['Label'] = "channel_threshold(\nMagick::MaxRGB*0.75,\nMagick::MaxRGB*0.50)"
29
+
30
+ img3 = img.channel_threshold(Magick::MaxRGB*0.50,
31
+ Magick::MaxRGB*0.25,
32
+ Magick::MaxRGB*0.25)
33
+ img3['Label'] = 'channel_threshold(\nMagick::MaxRGB*0.50,\nMagick::MaxRGB*0.25,\nMagick::MaxRGB*0.25)'
34
+
35
+ # Montage the two sample images
36
+ imgs = Magick::ImageList.new
37
+ imgs << img2 << img3
38
+
39
+ montage = imgs.montage {
40
+ self.background_color = "white"
41
+ self.geometry = "#{img.columns}x#{img.rows}+10+10"
42
+ self.tile = "2x1"
43
+ }
44
+
45
+ # Give the montage a black border
46
+ montage.border!(1,1,'black')
47
+ montage.write('channel_threshold_after.jpg')
48
+ exit
@@ -0,0 +1,12 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#charcoal method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img = img.charcoal(0.75)
9
+
10
+ img.write('charcoal.jpg')
11
+
12
+ exit
data/doc/ex/chop.rb ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#chop method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg')[0]
7
+
8
+ # Chop the specified rectangle out of the img.
9
+ chopped = img.chop(0, img.rows/2, img.columns/2, img.rows)
10
+
11
+ # Make a "before" image by highlighting the chopped area.
12
+ gc = Magick::Draw.new
13
+ gc.fill('white')
14
+ gc.stroke('transparent')
15
+ gc.fill_opacity(0.25)
16
+ gc.rectangle(0, img.rows/2, img.columns/2, img.rows)
17
+ gc.draw(img)
18
+
19
+ img.write('chop_before.jpg')
20
+
21
+ # Create a image to use as a background for
22
+ # the after image. Make the chopped image the
23
+ # same size as before the chop.
24
+ bg = Magick::Image.new(img.columns, img.rows)
25
+
26
+ chopped = bg.composite(chopped, Magick::NorthEastGravity, Magick::OverCompositeOp)
27
+
28
+ chopped.write('chop_after.jpg')
29
+ exit
data/doc/ex/circle.rb ADDED
@@ -0,0 +1,31 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ imgl = Magick::ImageList.new
5
+ imgl.new_image(250, 250, Magick::HatchFill.new('white','LightCyan2'))
6
+
7
+ gc = Magick::Draw.new
8
+
9
+ # Draw the circle
10
+ gc.fill_opacity(0)
11
+ gc.stroke('red').stroke_width(3)
12
+ gc.circle(125,125, 25, 125)
13
+
14
+ # Draw a little gray circle on the perimeter
15
+ gc.stroke_width(1)
16
+ gc.stroke('gray50')
17
+ gc.circle(25,125,28,128)
18
+
19
+ # Draw a dot at the center
20
+ gc.fill_opacity(1)
21
+ gc.circle(125,125, 128,128)
22
+
23
+ # Annotate the dots
24
+ gc.fill('black')
25
+ gc.stroke('transparent')
26
+ gc.text(132,125, "'125,125'")
27
+ gc.text(32,125, "'25,125'")
28
+ gc.draw(imgl)
29
+
30
+ imgl.border!(1,1, 'lightcyan2')
31
+ imgl.write("circle.gif")
@@ -0,0 +1,56 @@
1
+ #! /usr/local/bin/ruby -w
2
+
3
+ require 'RMagick'
4
+
5
+ points = [145, 65, 174,151, 264,151, 192,205,
6
+ 218,291, 145,240, 72,291, 98,205,
7
+ 26,151, 116,151]
8
+
9
+ pr = Magick::Draw.new
10
+
11
+ # Define a clip-path.
12
+ # The name of the clip-path is "example"
13
+ pr.define_clip_path('example') {
14
+ pr.polygon(*points)
15
+ }
16
+
17
+ # Enable the clip-path
18
+ pr.clip_path('example')
19
+
20
+ # Composite the Flower Hat image over
21
+ # the background using the clip-path
22
+ girl = Magick::ImageList.new
23
+ girl.read("images/Flower_Hat.jpg")
24
+
25
+ cols = rows = nil
26
+
27
+ # Our final image is about 290 pixels wide, so here
28
+ # we widen our picture to fit. The change_geometry
29
+ # method will adjust the height proportionately.
30
+
31
+ girl.change_geometry("290") do |c,r|
32
+ pr.composite(0,0, c, r, girl)
33
+ cols = c
34
+ rows = r
35
+ end
36
+
37
+ # Create a canvas to draw on, a bit bigger than the star.
38
+ canvas = Magick::Image.new(cols, rows)
39
+
40
+ star = Magick::Draw.new
41
+ star.stroke('black')
42
+ star.fill('black')
43
+ star.polygon(*points)
44
+ star.draw(canvas)
45
+ canvas = canvas.blur_image(0, 20)
46
+
47
+ # Draw the star over the background
48
+ pr.draw(canvas)
49
+
50
+ # Crop away all the solid white border pixels.
51
+ crop = canvas.bounding_box
52
+ canvas.crop!(crop.x, crop.y, crop.width, crop.height)
53
+
54
+ canvas.write("clip_path.gif")
55
+
56
+ exit
@@ -0,0 +1,60 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ buttons = Magick::ImageList.new
5
+
6
+ # Read 25 alphabet image files, scale to 1/4 size
7
+ letter = 'A'
8
+ 26.times {
9
+ if letter != 'M' # "M" is not the same size as the other letters
10
+ tiny = Magick::Image.read('images/Button_' + letter + '.gif').first
11
+ tiny.scale! 0.25
12
+ buttons << tiny
13
+ end
14
+ letter.succ!
15
+ }
16
+
17
+ # Create a image that will hold the alphabet images in 5 rows and 5 columns.
18
+ cells = Magick::ImageList.new
19
+ cells.new_image buttons.columns*5, buttons.rows*5 do
20
+ self.background_color = "#000000ff" # transparent
21
+ end
22
+ cells.matte = true
23
+
24
+ offset = Magick::Rectangle.new(0,0,0,0)
25
+
26
+ # Create 2 arrays from which we can randomly choose row,col pairs
27
+ row = [0]*5 + [1]*5 + [2]*5 + [3]*5 + [4]*5
28
+ col = (0..4).to_a * 5
29
+
30
+ # The coalesce method composites the 2nd image over the 1st, the 3rd image
31
+ # over the result, and so forth, respecting the page offset of the images.
32
+
33
+ srand 1234
34
+ 25.times { |i|
35
+ # Randomly select a row and column for this copy of the "tinya" image.
36
+ # Compute the x,y position of this copy in pixels and store the
37
+ # result in the image's page attribute. Append a copy of the image
38
+ # to the image array in "a".
39
+ n = rand row.length
40
+ x = row.delete_at n
41
+ y = col.delete_at n
42
+
43
+ button = buttons[i]
44
+ offset.x = x*button.columns
45
+ offset.y = y*button.rows
46
+ button.page = offset
47
+ button.matte = true
48
+ cells << button
49
+ }
50
+
51
+ puts "This may take a few seconds..."
52
+ cells.delay = 10
53
+ cells.iterations = 10000
54
+ res = cells.coalesce
55
+ res.write "coalesce_anim.gif"
56
+ res[25].write "coalesce.gif"
57
+ exit
58
+
59
+
60
+