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,43 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ f = Magick::Image.read("images/Flower_Hat.jpg").first
5
+
6
+ pixels = f.dispatch(0,0,f.columns,f.rows,"RGB")
7
+
8
+ # Write the pixels to a file, to be loaded in the Zconstitute.rb
9
+ # example. Ruby 1.6.8 # loads the Pixels array much faster if we break
10
+ # the array into many small pieces and concatenate them together, so this
11
+ # program generates such a sequence.
12
+
13
+ first = true
14
+ total = pixels.length
15
+
16
+ File.open('pixels-array', 'w') { |txt|
17
+ txt.puts("Width = #{f.columns}")
18
+ txt.puts("Height = #{f.rows}")
19
+ txt.puts('Pixels = [')
20
+ x = 0
21
+ pixels.each do |p|
22
+ txt.printf("%3d,", p)
23
+ x = x.succ
24
+ txt.printf("\n") if x % 25 == 0
25
+ if x % 1000 == 0
26
+ if first
27
+ txt.puts(']')
28
+ first = false
29
+ else
30
+ txt.puts('])')
31
+ end
32
+ txt.print('Pixels.concat([')
33
+ end
34
+ end
35
+
36
+ if first
37
+ txt.puts(']')
38
+ first = false
39
+ else
40
+ txt.puts('])')
41
+ end
42
+ }
43
+ exit
@@ -0,0 +1,9 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ load 'pixels-array'
5
+
6
+ image = Magick::Image.constitute(Width, Height, "RGB", Pixels)
7
+
8
+ image.write("constitute.jpg")
9
+ exit
@@ -0,0 +1,19 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#adaptive_threshold method
5
+
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
+
17
+ result.write("adaptive_threshold.jpg")
18
+ exit
19
+
@@ -0,0 +1,18 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+ include Magick
4
+
5
+ # Demonstrate the Image#add_noise method
6
+ NOISE_TYPES = [UniformNoise, GaussianNoise,
7
+ MultiplicativeGaussianNoise,
8
+ ImpulseNoise, LaplacianNoise,
9
+ PoissonNoise]
10
+
11
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
12
+
13
+ NOISE_TYPES.each do |noise|
14
+ copy = img.add_noise(noise)
15
+ copy.write "add_noise_#{noise.to_s}.jpg"
16
+
17
+ end
18
+ exit
data/doc/ex/affine.rb ADDED
@@ -0,0 +1,48 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the affine primitive. Transform the
5
+ # coordinate space to put the origin in the lower
6
+ # left corner.
7
+
8
+ imgl = Magick::ImageList.new
9
+ imgl.new_image 200, 200, Magick::HatchFill.new('white','lightcyan2')
10
+
11
+ gc = Magick::Draw.new
12
+
13
+ max_x = imgl.columns
14
+ max_y = imgl.rows
15
+
16
+ # Translate the y origin to the bottom of the window.
17
+ # Invert the y points by scaling by -1. Combine the
18
+ # two operations using the affine method. That is, the
19
+ # affine method is equivalent to:
20
+ # gc.translate 0, max_y
21
+ # gc.scale 1, -1
22
+ gc.affine(1, 0, 0, -1, 0, max_y)
23
+ gc.stroke('gray50')
24
+ gc.fill('gray50')
25
+ gc.stroke_width(1)
26
+
27
+ # Draw up-pointing arrow.
28
+ gc.polyline(10, 10, 10, max_y-10, 5, max_y-15, 15, max_y-15, 10, max_y-10)
29
+
30
+ # Draw right-pointing arrow
31
+ gc.polyline(10, 10, max_x-10, 10, max_x-15, 5, max_x-15, 15, max_x-10, 10)
32
+
33
+ gc.draw(imgl)
34
+
35
+ # Add labels. Use a different graphics context with a "normal"
36
+ # coordinate system so the text isn't inverted.
37
+ text_gc = Magick::Draw.new
38
+ text_gc.pointsize(14)
39
+ text_gc.font_weight(Magick::NormalWeight)
40
+ text_gc.stroke('transparent')
41
+ text_gc.text(15, max_y-15, "'0,0'")
42
+ text_gc.text(max_x-20, max_y-16, "'+x'")
43
+ text_gc.text(12, 15, "'+y'")
44
+ text_gc.draw(imgl)
45
+
46
+ imgl.border!(1, 1, "lightcyan2")
47
+
48
+ imgl.write("affine.gif")
@@ -0,0 +1,20 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#affine_transform method
5
+
6
+ # Construct a simple affine matrix
7
+ flipflop = Magick::AffineMatrix.new(-1, Math::PI/6, Math::PI/6, -1, 0, 0)
8
+
9
+ img = Magick::Image.read("images/Flower_Hat.jpg").first
10
+
11
+ # Apply the transform
12
+ img = img.affine_transform(flipflop)
13
+
14
+ # Scale the image, make the background transparent,
15
+ # and write it to a JPEG file.
16
+ img.scale!(250.0/img.rows)
17
+ img = img.matte_replace(0,0)
18
+ img.write("affine_transform.jpg")
19
+
20
+ exit
data/doc/ex/arc.rb ADDED
@@ -0,0 +1,47 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ i = Magick::Image.new(300, 220, Magick::HatchFill.new("white","lightcyan2"))
5
+ gc = Magick::Draw.new
6
+
7
+ # Draw the border rectangle.
8
+ gc.fill_opacity(0)
9
+ gc.stroke_width(1)
10
+ gc.stroke('gray50')
11
+ gc.rectangle(40, 50, 250, 180)
12
+
13
+ # Draw the circles around the rectangle corners and
14
+ # arc endpoints. All the circles have a 3-pixel radius.
15
+ gc.circle(40, 50, 40+3, 50)
16
+ gc.circle(250, 180, 250+3, 180)
17
+ gc.circle(250, 114, 250+3, 114)
18
+ gc.circle(146, 50, 146+3, 50)
19
+
20
+ # Annotate
21
+ gc.stroke('transparent')
22
+ gc.fill("black")
23
+ gc.fill_opacity(1)
24
+
25
+ # xMagick recognizes the braces as delimiters.
26
+ gc.gravity(Magick::NorthWestGravity)
27
+ gc.text(43, 45, "{40, 50}")
28
+ gc.text(195, 118, "{0 degrees}")
29
+
30
+ gc.gravity(Magick::SouthEastGravity)
31
+ gc.text(300-250, 220-195, "{250, 180}")
32
+
33
+ gc.gravity(Magick::NorthGravity)
34
+ gc.text(0, 67, "{270 degrees}")
35
+
36
+ # Draw the arc
37
+ gc.fill_opacity(0)
38
+ gc.stroke('red').stroke_width(3)
39
+ gc.arc(40, 50, 250,180, 0, 270)
40
+
41
+ # Draw on the canvas
42
+ gc.draw(i)
43
+
44
+ i.border!(1,1, "lightcyan2")
45
+
46
+ #i.display
47
+ i.write("arc.gif")
data/doc/ex/arcpath.rb ADDED
@@ -0,0 +1,33 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the "path" drawing primitive.
5
+
6
+ imgl = Magick::ImageList.new
7
+ imgl.new_image(450, 200, Magick::HatchFill.new('white','lightcyan2'))
8
+
9
+ gc = Magick::Draw.new
10
+
11
+ # Draw "pie chart"
12
+ gc.fill('red')
13
+ gc.stroke('blue')
14
+ gc.stroke_width(2)
15
+ gc.path('M110,100 h-75 a75,75 0 1,0 75,-75 z')
16
+ gc.fill('yellow')
17
+ gc.path('M97.5,87.5 v-75 a75,75 0 0,0 -75,75 z')
18
+
19
+ # Draw wiggly line
20
+ gc.fill_opacity(0)
21
+ gc.stroke('#00cd00')
22
+ gc.stroke_width(3)
23
+ gc.path('M200,175 l 25,-12.5 ' +
24
+ 'a12.5,12.5 -15 0,1 25,-12.5 l 25,-12.5 ' +
25
+ 'a12.5,25 -15 0,1 25,-12.5 l 25,-12.5 ' +
26
+ 'a12.5,37.5 -15 0,1 25,-12.5 l 25,-12.5 ' +
27
+ 'a12.5,50 -15 0,1 25,-12.5 l 25,-12.5')
28
+
29
+ gc.draw imgl
30
+ imgl.border!(1,1, "lightcyan2")
31
+
32
+ imgl.write('arcpath.gif')
33
+
data/doc/ex/average.rb ADDED
@@ -0,0 +1,15 @@
1
+ #! /usr/local/bin/ruby -w
2
+ # Demonstrate ImageList#average method
3
+ require 'RMagick'
4
+
5
+ images = Magick::ImageList.new("images/Button_A.gif", "images/Button_B.gif", "images/Button_C.gif")
6
+
7
+ group = images.append false
8
+ group.compression = Magick::LZWCompression
9
+ group.write "average_before.gif"
10
+
11
+ average_image = images.average
12
+
13
+ average_image.compression = Magick::LZWCompression
14
+ average_image.write "average_after.gif"
15
+ exit
data/doc/ex/axes.rb ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/local/bin/ruby -w
2
+
3
+ require 'RMagick'
4
+
5
+ # Demonstrate the use of RMagick's Draw class
6
+ # and show the default coordinate system.
7
+
8
+ # Create a canvas to draw on. Use the HatchFill class to
9
+ # cross-hatch the background with light gray lines every 10 pixels.
10
+ canvas = Magick::ImageList.new
11
+ canvas.new_image(250, 250, Magick::HatchFill.new('white', 'gray90'))
12
+
13
+ # Draw a border around the edges of the canvas.
14
+ border = Magick::Draw.new
15
+ border.stroke('thistle')
16
+ border.fill_opacity(0)
17
+ border.rectangle(0,0, canvas.rows-1, canvas.columns-1)
18
+ border.draw(canvas)
19
+
20
+ # Draw gold axes with arrow-heads.
21
+ axes = Magick::Draw.new
22
+ axes.fill_opacity(0)
23
+ axes.stroke('gold3')
24
+ axes.stroke_width(4)
25
+ axes.stroke_linecap('round')
26
+ axes.stroke_linejoin('round')
27
+ axes.polyline(18,canvas.rows-10, 10,canvas.rows-3, 3,canvas.rows-10,
28
+ 10,canvas.rows-10, 10,10, canvas.columns-10,10,
29
+ canvas.columns-10,3, canvas.columns-3,10, canvas.columns-10, 18)
30
+ axes.draw(canvas)
31
+
32
+ # Draw a red circle to show the direction of rotation.
33
+ # Make it slightly transparent so the hatching will show through.
34
+ circle = Magick::Draw.new
35
+ circle.stroke('tomato')
36
+ circle.fill_opacity(0)
37
+ circle.stroke_opacity(0.75)
38
+ circle.stroke_width(6)
39
+ circle.stroke_linecap('round')
40
+ circle.stroke_linejoin('round')
41
+ circle.ellipse(canvas.rows/2,canvas.columns/2, 80, 80, 0, 315)
42
+ circle.polyline(180,70, 173,78, 190,78, 191,62)
43
+ circle.draw(canvas)
44
+
45
+ # Label the axes and the circle.
46
+ labels = Magick::Draw.new
47
+ labels.fill('black')
48
+ labels.stroke('transparent')
49
+ labels.font_family('helvetica')
50
+ labels.font_style(Magick::ItalicStyle)
51
+ labels.pointsize(14)
52
+ labels.gravity(Magick::NorthWestGravity)
53
+ labels.text(20,30, "'0,0'")
54
+ labels.gravity(Magick::NorthEastGravity)
55
+ labels.text(20,30, "'+x'")
56
+ labels.gravity(Magick::SouthWestGravity)
57
+ labels.text(20,20, "'+y'")
58
+ labels.gravity(Magick::CenterGravity)
59
+ labels.text(0,0, "Rotation")
60
+ labels.draw(canvas)
61
+
62
+ #canvas.display
63
+ canvas.write("axes.gif")
64
+ exit
@@ -0,0 +1,20 @@
1
+ #! /usr/local/bin/ruby -w
2
+
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
+
18
+ result.write('bilevel_channel.jpg')
19
+ exit
20
+
@@ -0,0 +1,12 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#blur_image method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ # Make a blurry copy.
9
+ img = img.blur_image(0.0,2.5)
10
+
11
+ img.write('blur_image.jpg')
12
+ exit
data/doc/ex/border.rb ADDED
@@ -0,0 +1,10 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ # Demonstrate the Image#border method
5
+
6
+ img = Magick::Image.read('images/Flower_Hat.jpg').first
7
+
8
+ img.border!(10,10,'rgb(255,110,140)')
9
+ img.write('border.jpg')
10
+ exit
@@ -0,0 +1,48 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ i = Magick::ImageList.new
5
+ i.new_image(200, 200) { self.background_color = "#ffffcc" }
6
+
7
+ # Draw a blue circle.
8
+ primitives = Magick::Draw.new
9
+ primitives.stroke_width 5
10
+ primitives.stroke "blue"
11
+ primitives.fill_opacity 0
12
+ primitives.circle 100,100, 100,150
13
+ primitives.draw i
14
+
15
+ # Get the bounding box. Use the values to draw
16
+ # a gray square surrounding the circle. Highlight
17
+ # the corners with tiny red circles.
18
+
19
+ bb = i.bounding_box
20
+ primitives = Magick::Draw.new
21
+ primitives.stroke "gray50"
22
+ primitives.fill_opacity 0
23
+ primitives.rectangle bb.x, bb.y, bb.x+bb.width, bb.y+bb.height
24
+ primitives.stroke "red"
25
+ primitives.circle bb.x, bb.y, bb.x+2, bb.y+2
26
+ primitives.circle bb.x+bb.width, bb.y, bb.x+bb.width+2, bb.y+2
27
+ primitives.circle bb.x, bb.y+bb.height, bb.x+2, bb.y+bb.height+2
28
+ primitives.circle bb.x+bb.width, bb.y+bb.height, bb.x+bb.width+2, bb.y+bb.height+2
29
+
30
+
31
+ primitives.pointsize 10
32
+ primitives.fill "black"
33
+ primitives.stroke "transparent"
34
+ primitives.gravity Magick::NorthWestGravity
35
+ primitives.text bb.x-15, bb.y-5, "\'#{bb.x},#{bb.y}\'"
36
+ primitives.gravity Magick::NorthEastGravity
37
+ primitives.text bb.x-15, bb.y-5, "\'#{bb.x+bb.width},#{bb.y}\'"
38
+ primitives.gravity Magick::SouthWestGravity
39
+ primitives.text bb.x-15, bb.y-12, "\'#{bb.x},#{bb.y+bb.height}\'"
40
+ primitives.gravity Magick::SouthEastGravity
41
+ primitives.text bb.x-15, bb.y-12, "\'#{bb.x+bb.width},#{bb.y+bb.height}\'"
42
+
43
+
44
+ primitives.draw i
45
+
46
+ #i.display
47
+ i.write "bounding_box.gif"
48
+ exit
@@ -0,0 +1,40 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'RMagick'
3
+
4
+ imgl = Magick::ImageList.new
5
+ imgl.new_image(390, 140, Magick::HatchFill.new('white','lightcyan2'))
6
+ gc = Magick::Draw.new
7
+
8
+ # Draw Bezier curve
9
+ gc.stroke('red')
10
+ gc.stroke_width(2)
11
+ gc.fill_opacity(0)
12
+ gc.bezier(20,120, 20,20, 320, 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, 20,20)
22
+ gc.line(320,120, 320,20)
23
+ gc.fill_opacity(1)
24
+ gc.fill('gray50')
25
+ gc.circle(20,20, 23,23)
26
+ gc.circle(320,20, 323,23)
27
+
28
+ # Annotate
29
+ gc.fill('black')
30
+ gc.stroke('transparent')
31
+ gc.text(27,120, "'20,120'")
32
+ gc.text(27,20, "'20,20'")
33
+ gc.text(327,120, "'320,120'")
34
+ gc.text(327,20, "'320,20'")
35
+ gc.draw(imgl)
36
+
37
+ imgl.border!(1, 1, "lightcyan2")
38
+ imgl.write('cbezier1.gif')
39
+ exit(0)
40
+