rmagick 2.13.2 → 4.2.2

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 (380) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +17 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/workflows/ci.yml +107 -0
  6. data/.gitignore +25 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +37 -0
  9. data/.rubocop_todo.yml +449 -0
  10. data/.yardopts +5 -0
  11. data/CHANGELOG.md +1277 -0
  12. data/CODE_OF_CONDUCT.md +128 -0
  13. data/CONTRIBUTING.md +81 -0
  14. data/Gemfile +4 -0
  15. data/LICENSE +20 -0
  16. data/README.md +324 -0
  17. data/Rakefile +190 -0
  18. data/before_install_linux.sh +69 -0
  19. data/before_install_osx.sh +57 -0
  20. data/deprecated/RMagick.rb +6 -0
  21. data/ext/RMagick/extconf.rb +334 -333
  22. data/ext/RMagick/rmagick.c +129 -127
  23. data/ext/RMagick/rmagick.h +221 -320
  24. data/ext/RMagick/rmdraw.c +458 -767
  25. data/ext/RMagick/rmenum.c +305 -752
  26. data/ext/RMagick/rmfill.c +231 -199
  27. data/ext/RMagick/rmilist.c +437 -478
  28. data/ext/RMagick/rmimage.c +6130 -5342
  29. data/ext/RMagick/rminfo.c +695 -833
  30. data/ext/RMagick/rmkinfo.c +198 -0
  31. data/ext/RMagick/rmmain.c +752 -506
  32. data/ext/RMagick/rmmontage.c +94 -152
  33. data/ext/RMagick/rmpixel.c +619 -425
  34. data/ext/RMagick/rmstruct.c +206 -309
  35. data/ext/RMagick/rmutil.c +514 -344
  36. data/lib/rmagick/version.rb +5 -0
  37. data/lib/rmagick.rb +1 -0
  38. data/lib/rmagick_internal.rb +1922 -0
  39. data/lib/rvg/clippath.rb +35 -39
  40. data/lib/rvg/container.rb +123 -124
  41. data/lib/rvg/deep_equal.rb +45 -49
  42. data/lib/rvg/describable.rb +41 -47
  43. data/lib/rvg/embellishable.rb +380 -411
  44. data/lib/rvg/misc.rb +691 -711
  45. data/lib/rvg/paint.rb +43 -47
  46. data/lib/rvg/pathdata.rb +119 -125
  47. data/lib/rvg/rvg.rb +214 -213
  48. data/lib/rvg/stretchable.rb +153 -162
  49. data/lib/rvg/stylable.rb +111 -117
  50. data/lib/rvg/text.rb +169 -180
  51. data/lib/rvg/transformable.rb +121 -127
  52. data/lib/rvg/units.rb +58 -61
  53. data/rmagick.gemspec +36 -16
  54. metadata +188 -365
  55. data/ChangeLog +0 -773
  56. data/Doxyfile +0 -1514
  57. data/README-Mac-OSX.txt +0 -1
  58. data/README.html +0 -10
  59. data/build_tarball.rake +0 -215
  60. data/doc/comtasks.html +0 -287
  61. data/doc/constants.html +0 -1581
  62. data/doc/css/doc.css +0 -299
  63. data/doc/css/popup.css +0 -34
  64. data/doc/css/ref.css +0 -67
  65. data/doc/draw.html +0 -3269
  66. data/doc/ex/InitialCoords.rb +0 -23
  67. data/doc/ex/NewCoordSys.rb +0 -32
  68. data/doc/ex/OrigCoordSys.rb +0 -18
  69. data/doc/ex/PreserveAspectRatio.rb +0 -205
  70. data/doc/ex/RotateScale.rb +0 -37
  71. data/doc/ex/Skew.rb +0 -38
  72. data/doc/ex/Use01.rb +0 -16
  73. data/doc/ex/Use02.rb +0 -21
  74. data/doc/ex/Use03.rb +0 -16
  75. data/doc/ex/ViewBox.rb +0 -33
  76. data/doc/ex/adaptive_threshold.rb +0 -10
  77. data/doc/ex/add_noise.rb +0 -17
  78. data/doc/ex/affine.rb +0 -48
  79. data/doc/ex/affine_transform.rb +0 -20
  80. data/doc/ex/arc.rb +0 -49
  81. data/doc/ex/arcpath.rb +0 -33
  82. data/doc/ex/arcs01.rb +0 -28
  83. data/doc/ex/arcs02.rb +0 -61
  84. data/doc/ex/average.rb +0 -15
  85. data/doc/ex/axes.rb +0 -64
  86. data/doc/ex/baseline_shift01.rb +0 -18
  87. data/doc/ex/bilevel_channel.rb +0 -9
  88. data/doc/ex/blur_image.rb +0 -12
  89. data/doc/ex/border.rb +0 -10
  90. data/doc/ex/bounding_box.rb +0 -44
  91. data/doc/ex/cbezier1.rb +0 -42
  92. data/doc/ex/cbezier2.rb +0 -42
  93. data/doc/ex/cbezier3.rb +0 -42
  94. data/doc/ex/cbezier4.rb +0 -43
  95. data/doc/ex/cbezier5.rb +0 -43
  96. data/doc/ex/cbezier6.rb +0 -53
  97. data/doc/ex/channel.rb +0 -26
  98. data/doc/ex/charcoal.rb +0 -12
  99. data/doc/ex/chop.rb +0 -29
  100. data/doc/ex/circle.rb +0 -33
  101. data/doc/ex/circle01.rb +0 -17
  102. data/doc/ex/clip_path.rb +0 -60
  103. data/doc/ex/coalesce.rb +0 -60
  104. data/doc/ex/color_fill_to_border.rb +0 -29
  105. data/doc/ex/color_floodfill.rb +0 -28
  106. data/doc/ex/color_histogram.rb +0 -48
  107. data/doc/ex/color_reset.rb +0 -11
  108. data/doc/ex/colorize.rb +0 -16
  109. data/doc/ex/colors.rb +0 -64
  110. data/doc/ex/compose_mask.rb +0 -23
  111. data/doc/ex/composite.rb +0 -135
  112. data/doc/ex/composite_layers.rb +0 -53
  113. data/doc/ex/composite_tiled.rb +0 -23
  114. data/doc/ex/contrast.rb +0 -36
  115. data/doc/ex/crop.rb +0 -31
  116. data/doc/ex/crop_with_gravity.rb +0 -46
  117. data/doc/ex/cubic01.rb +0 -45
  118. data/doc/ex/cubic02.rb +0 -94
  119. data/doc/ex/cycle_colormap.rb +0 -21
  120. data/doc/ex/dissolve.rb +0 -13
  121. data/doc/ex/drawcomp.rb +0 -42
  122. data/doc/ex/drop_shadow.rb +0 -60
  123. data/doc/ex/edge.rb +0 -11
  124. data/doc/ex/ellipse.rb +0 -45
  125. data/doc/ex/ellipse01.rb +0 -22
  126. data/doc/ex/emboss.rb +0 -11
  127. data/doc/ex/enhance.rb +0 -28
  128. data/doc/ex/equalize.rb +0 -11
  129. data/doc/ex/evenodd.rb +0 -43
  130. data/doc/ex/fill_pattern.rb +0 -26
  131. data/doc/ex/flatten_images.rb +0 -36
  132. data/doc/ex/flip.rb +0 -11
  133. data/doc/ex/flop.rb +0 -11
  134. data/doc/ex/font_styles.rb +0 -34
  135. data/doc/ex/fonts.rb +0 -20
  136. data/doc/ex/frame.rb +0 -12
  137. data/doc/ex/gaussian_blur.rb +0 -11
  138. data/doc/ex/get_multiline_type_metrics.rb +0 -42
  139. data/doc/ex/get_pixels.rb +0 -48
  140. data/doc/ex/get_type_metrics.rb +0 -146
  141. data/doc/ex/gradientfill.rb +0 -27
  142. data/doc/ex/grav.rb +0 -46
  143. data/doc/ex/gravity.rb +0 -79
  144. data/doc/ex/group.rb +0 -26
  145. data/doc/ex/hatchfill.rb +0 -27
  146. data/doc/ex/image.rb +0 -46
  147. data/doc/ex/images/Apple.miff +0 -0
  148. data/doc/ex/images/Ballerina.jpg +0 -0
  149. data/doc/ex/images/Ballerina3.jpg +0 -0
  150. data/doc/ex/images/Button_0.gif +0 -0
  151. data/doc/ex/images/Button_1.gif +0 -0
  152. data/doc/ex/images/Button_2.gif +0 -0
  153. data/doc/ex/images/Button_3.gif +0 -0
  154. data/doc/ex/images/Button_4.gif +0 -0
  155. data/doc/ex/images/Button_5.gif +0 -0
  156. data/doc/ex/images/Button_6.gif +0 -0
  157. data/doc/ex/images/Button_7.gif +0 -0
  158. data/doc/ex/images/Button_8.gif +0 -0
  159. data/doc/ex/images/Button_9.gif +0 -0
  160. data/doc/ex/images/Button_A.gif +0 -0
  161. data/doc/ex/images/Button_B.gif +0 -0
  162. data/doc/ex/images/Button_C.gif +0 -0
  163. data/doc/ex/images/Button_D.gif +0 -0
  164. data/doc/ex/images/Button_E.gif +0 -0
  165. data/doc/ex/images/Button_F.gif +0 -0
  166. data/doc/ex/images/Button_G.gif +0 -0
  167. data/doc/ex/images/Button_H.gif +0 -0
  168. data/doc/ex/images/Button_I.gif +0 -0
  169. data/doc/ex/images/Button_J.gif +0 -0
  170. data/doc/ex/images/Button_K.gif +0 -0
  171. data/doc/ex/images/Button_L.gif +0 -0
  172. data/doc/ex/images/Button_M.gif +0 -0
  173. data/doc/ex/images/Button_N.gif +0 -0
  174. data/doc/ex/images/Button_O.gif +0 -0
  175. data/doc/ex/images/Button_P.gif +0 -0
  176. data/doc/ex/images/Button_Q.gif +0 -0
  177. data/doc/ex/images/Button_R.gif +0 -0
  178. data/doc/ex/images/Button_S.gif +0 -0
  179. data/doc/ex/images/Button_T.gif +0 -0
  180. data/doc/ex/images/Button_U.gif +0 -0
  181. data/doc/ex/images/Button_V.gif +0 -0
  182. data/doc/ex/images/Button_W.gif +0 -0
  183. data/doc/ex/images/Button_X.gif +0 -0
  184. data/doc/ex/images/Button_Y.gif +0 -0
  185. data/doc/ex/images/Button_Z.gif +0 -0
  186. data/doc/ex/images/Cheetah.jpg +0 -0
  187. data/doc/ex/images/Coffee.wmf +0 -0
  188. data/doc/ex/images/Flower_Hat.jpg +0 -0
  189. data/doc/ex/images/Gold_Statue.jpg +0 -0
  190. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  191. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  192. data/doc/ex/images/Leaf.miff +0 -0
  193. data/doc/ex/images/No.wmf +0 -0
  194. data/doc/ex/images/Polynesia.jpg +0 -0
  195. data/doc/ex/images/Red_Rocks.jpg +0 -0
  196. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  197. data/doc/ex/images/Shorts.jpg +0 -0
  198. data/doc/ex/images/Snake.wmf +0 -0
  199. data/doc/ex/images/Violin.jpg +0 -0
  200. data/doc/ex/images/Yellow_Rose.miff +0 -0
  201. data/doc/ex/images/big-duck.gif +0 -0
  202. data/doc/ex/images/duck.gif +0 -0
  203. data/doc/ex/images/duck0.gif +0 -0
  204. data/doc/ex/images/duck1.gif +0 -0
  205. data/doc/ex/images/duck10.gif +0 -0
  206. data/doc/ex/images/duck11.gif +0 -0
  207. data/doc/ex/images/duck12.gif +0 -0
  208. data/doc/ex/images/duck13.gif +0 -0
  209. data/doc/ex/images/duck14.gif +0 -0
  210. data/doc/ex/images/duck15.gif +0 -0
  211. data/doc/ex/images/duck2.gif +0 -0
  212. data/doc/ex/images/duck3.gif +0 -0
  213. data/doc/ex/images/duck4.gif +0 -0
  214. data/doc/ex/images/duck5.gif +0 -0
  215. data/doc/ex/images/duck6.gif +0 -0
  216. data/doc/ex/images/duck7.gif +0 -0
  217. data/doc/ex/images/duck8.gif +0 -0
  218. data/doc/ex/images/duck9.gif +0 -0
  219. data/doc/ex/images/graydient230x6.gif +0 -0
  220. data/doc/ex/images/logo400x83.gif +0 -0
  221. data/doc/ex/images/model.miff +0 -0
  222. data/doc/ex/images/notimplemented.gif +0 -0
  223. data/doc/ex/images/smile.miff +0 -0
  224. data/doc/ex/images/spin.gif +0 -0
  225. data/doc/ex/implode.rb +0 -34
  226. data/doc/ex/level.rb +0 -11
  227. data/doc/ex/level_colors.rb +0 -11
  228. data/doc/ex/line.rb +0 -42
  229. data/doc/ex/line01.rb +0 -23
  230. data/doc/ex/mask.rb +0 -36
  231. data/doc/ex/matte_fill_to_border.rb +0 -40
  232. data/doc/ex/matte_floodfill.rb +0 -33
  233. data/doc/ex/matte_replace.rb +0 -40
  234. data/doc/ex/median_filter.rb +0 -28
  235. data/doc/ex/modulate.rb +0 -11
  236. data/doc/ex/mono.rb +0 -23
  237. data/doc/ex/morph.rb +0 -26
  238. data/doc/ex/mosaic.rb +0 -35
  239. data/doc/ex/motion_blur.rb +0 -11
  240. data/doc/ex/negate.rb +0 -11
  241. data/doc/ex/negate_channel.rb +0 -9
  242. data/doc/ex/nested_rvg.rb +0 -21
  243. data/doc/ex/nonzero.rb +0 -43
  244. data/doc/ex/normalize.rb +0 -11
  245. data/doc/ex/oil_paint.rb +0 -11
  246. data/doc/ex/opacity.rb +0 -37
  247. data/doc/ex/ordered_dither.rb +0 -11
  248. data/doc/ex/path.rb +0 -64
  249. data/doc/ex/pattern1.rb +0 -25
  250. data/doc/ex/pattern2.rb +0 -26
  251. data/doc/ex/polaroid.rb +0 -28
  252. data/doc/ex/polygon.rb +0 -24
  253. data/doc/ex/polygon01.rb +0 -23
  254. data/doc/ex/polyline.rb +0 -23
  255. data/doc/ex/polyline01.rb +0 -23
  256. data/doc/ex/posterize.rb +0 -8
  257. data/doc/ex/preview.rb +0 -9
  258. data/doc/ex/qbezierpath.rb +0 -52
  259. data/doc/ex/quad01.rb +0 -36
  260. data/doc/ex/quantize-m.rb +0 -25
  261. data/doc/ex/radial_blur.rb +0 -9
  262. data/doc/ex/raise.rb +0 -8
  263. data/doc/ex/random_threshold_channel.rb +0 -13
  264. data/doc/ex/rect01.rb +0 -15
  265. data/doc/ex/rect02.rb +0 -22
  266. data/doc/ex/rectangle.rb +0 -35
  267. data/doc/ex/reduce_noise.rb +0 -28
  268. data/doc/ex/remap.rb +0 -12
  269. data/doc/ex/remap_images.rb +0 -21
  270. data/doc/ex/resize_to_fill.rb +0 -10
  271. data/doc/ex/resize_to_fit.rb +0 -10
  272. data/doc/ex/roll.rb +0 -9
  273. data/doc/ex/rotate.rb +0 -45
  274. data/doc/ex/rotate_f.rb +0 -14
  275. data/doc/ex/roundrect.rb +0 -34
  276. data/doc/ex/rubyname.rb +0 -30
  277. data/doc/ex/rvg_clippath.rb +0 -14
  278. data/doc/ex/rvg_linecap.rb +0 -43
  279. data/doc/ex/rvg_linejoin.rb +0 -41
  280. data/doc/ex/rvg_opacity.rb +0 -19
  281. data/doc/ex/rvg_pattern.rb +0 -26
  282. data/doc/ex/rvg_stroke_dasharray.rb +0 -12
  283. data/doc/ex/segment.rb +0 -11
  284. data/doc/ex/sepiatone.rb +0 -8
  285. data/doc/ex/shade.rb +0 -11
  286. data/doc/ex/shadow.rb +0 -31
  287. data/doc/ex/shave.rb +0 -15
  288. data/doc/ex/shear.rb +0 -10
  289. data/doc/ex/sketch.rb +0 -18
  290. data/doc/ex/skewx.rb +0 -52
  291. data/doc/ex/skewy.rb +0 -47
  292. data/doc/ex/smile.rb +0 -125
  293. data/doc/ex/solarize.rb +0 -11
  294. data/doc/ex/sparse_color.rb +0 -55
  295. data/doc/ex/splice.rb +0 -9
  296. data/doc/ex/spread.rb +0 -11
  297. data/doc/ex/stegano.rb +0 -55
  298. data/doc/ex/stroke_dasharray.rb +0 -43
  299. data/doc/ex/stroke_fill.rb +0 -11
  300. data/doc/ex/stroke_linecap.rb +0 -44
  301. data/doc/ex/stroke_linejoin.rb +0 -48
  302. data/doc/ex/stroke_width.rb +0 -49
  303. data/doc/ex/swirl.rb +0 -17
  304. data/doc/ex/text.rb +0 -37
  305. data/doc/ex/text01.rb +0 -17
  306. data/doc/ex/text_align.rb +0 -36
  307. data/doc/ex/text_antialias.rb +0 -38
  308. data/doc/ex/text_styles.rb +0 -21
  309. data/doc/ex/text_undercolor.rb +0 -28
  310. data/doc/ex/texture_fill_to_border.rb +0 -34
  311. data/doc/ex/texture_floodfill.rb +0 -32
  312. data/doc/ex/texturefill.rb +0 -25
  313. data/doc/ex/threshold.rb +0 -13
  314. data/doc/ex/to_blob.rb +0 -14
  315. data/doc/ex/translate.rb +0 -39
  316. data/doc/ex/transparent.rb +0 -38
  317. data/doc/ex/transpose.rb +0 -9
  318. data/doc/ex/transverse.rb +0 -9
  319. data/doc/ex/tref01.rb +0 -25
  320. data/doc/ex/triangle01.rb +0 -16
  321. data/doc/ex/trim.rb +0 -24
  322. data/doc/ex/tspan01.rb +0 -18
  323. data/doc/ex/tspan02.rb +0 -19
  324. data/doc/ex/tspan03.rb +0 -21
  325. data/doc/ex/unsharp_mask.rb +0 -28
  326. data/doc/ex/viewex.rb +0 -35
  327. data/doc/ex/vignette.rb +0 -12
  328. data/doc/ex/watermark.rb +0 -28
  329. data/doc/ex/wave.rb +0 -9
  330. data/doc/ex/wet_floor.rb +0 -59
  331. data/doc/ex/writing_mode01.rb +0 -27
  332. data/doc/ex/writing_mode02.rb +0 -26
  333. data/doc/ilist.html +0 -2056
  334. data/doc/image1.html +0 -4680
  335. data/doc/image2.html +0 -3665
  336. data/doc/image3.html +0 -4522
  337. data/doc/imageattrs.html +0 -1638
  338. data/doc/imusage.html +0 -514
  339. data/doc/index.html +0 -416
  340. data/doc/info.html +0 -1499
  341. data/doc/magick.html +0 -565
  342. data/doc/optequiv.html +0 -2435
  343. data/doc/rvg.html +0 -975
  344. data/doc/rvgclip.html +0 -248
  345. data/doc/rvggroup.html +0 -305
  346. data/doc/rvgimage.html +0 -289
  347. data/doc/rvgpattern.html +0 -475
  348. data/doc/rvgshape.html +0 -406
  349. data/doc/rvgstyle.html +0 -270
  350. data/doc/rvgtext.html +0 -465
  351. data/doc/rvgtspan.html +0 -238
  352. data/doc/rvgtut.html +0 -530
  353. data/doc/rvguse.html +0 -145
  354. data/doc/rvgxform.html +0 -294
  355. data/doc/scripts/doc.js +0 -22
  356. data/doc/scripts/stripeTables.js +0 -23
  357. data/doc/struct.html +0 -1339
  358. data/doc/usage.html +0 -1621
  359. data/examples/constitute.rb +0 -7
  360. data/examples/crop_with_gravity.rb +0 -46
  361. data/examples/demo.rb +0 -324
  362. data/examples/describe.rb +0 -44
  363. data/examples/find_similar_region.rb +0 -34
  364. data/examples/histogram.rb +0 -325
  365. data/examples/identify.rb +0 -187
  366. data/examples/image_opacity.rb +0 -29
  367. data/examples/import_export.rb +0 -31
  368. data/examples/pattern_fill.rb +0 -38
  369. data/examples/rotating_text.rb +0 -45
  370. data/examples/spinner.rb +0 -50
  371. data/examples/thumbnail.rb +0 -65
  372. data/examples/vignette.rb +0 -79
  373. data/ext/RMagick/MANIFEST +0 -358
  374. data/lib/RMagick.rb +0 -1962
  375. data/metaconfig +0 -7
  376. data/post-clean.rb +0 -12
  377. data/post-install.rb +0 -50
  378. data/post-setup.rb +0 -254
  379. data/setup.rb +0 -1585
  380. data/uninstall.rb +0 -76
data/doc/ex/clip_path.rb DELETED
@@ -1,60 +0,0 @@
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.push
19
- pr.clip_path('example')
20
-
21
- # Composite the Flower Hat image over
22
- # the background using the clip-path
23
- girl = Magick::ImageList.new
24
- girl.read("images/Flower_Hat.jpg")
25
-
26
- cols = rows = nil
27
-
28
- # Our final image is about 280 pixels wide, so here
29
- # we widen our picture to fit. The change_geometry
30
- # method will adjust the height proportionately.
31
-
32
- girl.change_geometry("280") do |c,r|
33
- pr.composite(0,0, c, r, girl)
34
- cols = c
35
- rows = r
36
- end
37
-
38
- pr.pop
39
-
40
- # Create a canvas to draw on, a bit bigger than the star.
41
- canvas = Magick::Image.new(cols, rows)
42
-
43
- star = Magick::Draw.new
44
- star.stroke('gray50')
45
- star.fill('gray50')
46
- points.map! {|p| p + 8}
47
- star.polygon(*points)
48
- star.draw(canvas)
49
- canvas = canvas.blur_image(0, 3)
50
-
51
- # Draw the star shadow over the background
52
- pr.draw(canvas)
53
-
54
- # Crop away all the solid white border pixels.
55
- crop = canvas.bounding_box
56
- canvas.crop!(crop.x, crop.y, crop.width, crop.height)
57
-
58
- canvas.write("clip_path.gif")
59
-
60
- exit
data/doc/ex/coalesce.rb DELETED
@@ -1,60 +0,0 @@
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
-
@@ -1,29 +0,0 @@
1
- #! /usr/local/bin/ruby -w
2
- require 'RMagick'
3
-
4
- # Demonstrate the Image#color_fill_to_border method
5
-
6
- before = Magick::Image.new(200,200) {
7
- self.background_color = 'white'
8
- self.border_color = 'black'
9
- }
10
- before.border!(1,1,'black')
11
-
12
- circle = Magick::Draw.new
13
- circle.fill('transparent')
14
- circle.stroke('black')
15
- circle.stroke_width(2)
16
- circle.circle(100,100,180,100)
17
- circle.fill('plum1')
18
- circle.stroke('transparent')
19
- circle.circle( 60,100, 40,100)
20
- circle.circle(140,100,120,100)
21
- circle.circle(100, 60,100, 40)
22
- circle.circle(100,140,100,120)
23
- circle.draw(before)
24
-
25
- before.write('color_fill_to_border_before.gif')
26
-
27
- after = before.color_fill_to_border(100,100, 'aquamarine')
28
- after.write('color_fill_to_border_after.gif')
29
- exit
@@ -1,28 +0,0 @@
1
- #! /usr/local/bin/ruby -w
2
- require 'RMagick'
3
-
4
- # Demonstrate the Image#color_floodfill method
5
-
6
- before = Magick::Image.new(200,200) { self.background_color = 'white' }
7
- before.border!(1,1,'black')
8
-
9
- circle = Magick::Draw.new
10
- circle.fill('transparent')
11
- circle.stroke_width(2)
12
- circle.stroke('black')
13
- circle.circle(100,100,180,100)
14
- circle.fill('plum1')
15
- circle.stroke('transparent')
16
- circle.circle( 60,100, 40,100)
17
- circle.circle(140,100,120,100)
18
- circle.circle(100, 60,100, 40)
19
- circle.circle(100,140,100,120)
20
- circle.draw(before)
21
-
22
- before.write('color_floodfill_before.gif')
23
-
24
- aquamarine = Magick::Pixel.from_color('aquamarine')
25
- after = before.color_floodfill(100,100, aquamarine)
26
-
27
- after.write('color_floodfill_after.gif')
28
- exit
@@ -1,48 +0,0 @@
1
- #! /usr/local/bin/ruby -w
2
-
3
- require 'RMagick'
4
-
5
- NUM_COLORS = 256
6
- HIST_HEIGHT = 200
7
-
8
- img = Magick::Image.read('images/Hot_Air_Balloons_H.jpg').first
9
- img = img.quantize(NUM_COLORS)
10
-
11
- hist = img.color_histogram
12
-
13
- # sort pixels by increasing count
14
- pixels = hist.keys.sort_by {|pixel| hist[pixel] }
15
-
16
- scale = HIST_HEIGHT / (hist.values.max*1.025) # put 2.5% air at the top
17
-
18
- gc = Magick::Draw.new
19
- gc.stroke_width(1)
20
- gc.affine(1, 0, 0, -scale, 0, HIST_HEIGHT)
21
-
22
- # handle images with fewer than NUM_COLORS colors
23
- start = NUM_COLORS - img.number_colors
24
-
25
- pixels.each { |pixel|
26
- gc.stroke(pixel.to_color)
27
- gc.line(start, 0, start, hist[pixel])
28
- start = start.succ
29
- }
30
-
31
- hatch = Magick::HatchFill.new("white", "gray95")
32
- canvas = Magick::Image.new(NUM_COLORS, HIST_HEIGHT, hatch)
33
- gc.draw(canvas)
34
-
35
- text = Magick::Draw.new
36
- text.annotate(canvas, 0, 0, 0, 20, "Color Frequency\nHistogram") {
37
- self.pointsize = 10
38
- self.gravity = Magick::NorthGravity
39
- self.stroke = 'transparent'
40
- }
41
-
42
- canvas.border!(1, 1, "white")
43
- canvas.border!(1, 1, "black")
44
- canvas.border!(3, 3, "white")
45
- canvas.write("color_histogram.gif")
46
-
47
- exit
48
-
@@ -1,11 +0,0 @@
1
- #! /usr/local/bin/ruby -w
2
- require 'RMagick'
3
-
4
- # Demonstrate the Image#color_reset! method
5
-
6
- f = Magick::Image.new(100,100) { self.background_color = 'white' }
7
- red = Magick::Pixel.from_color('red')
8
- f.color_reset!(red)
9
- #f.display
10
- f.write('color_reset.gif')
11
- exit
data/doc/ex/colorize.rb DELETED
@@ -1,16 +0,0 @@
1
- #!/usr/local/bin/ruby -w
2
- require 'RMagick'
3
-
4
- # Demonstrate the Image#colorize method by converting
5
- # a full-color image to "sepia-tone"
6
-
7
- img = Magick::Image.read('images/Flower_Hat.jpg').first
8
-
9
- # Convert the color image to monochrome
10
- mono = img.quantize(256, Magick::GRAYColorspace)
11
-
12
- # Colorize with a 30% blend of a brownish-orange color
13
- colorized = mono.colorize(0.30, 0.30, 0.30, '#cc9933')
14
-
15
- colorized.write('colorize.jpg')
16
- exit
data/doc/ex/colors.rb DELETED
@@ -1,64 +0,0 @@
1
- #! /usr/local/bin/ruby -w
2
- require 'RMagick'
3
- include Magick
4
-
5
- puts("Creating colors.miff. This may take a few seconds...")
6
-
7
- colors = ImageList.new
8
-
9
- # Add a row of "null" colors so we'll have
10
- # room to add the title at the top.
11
- 4.times { colors.read('null:') }
12
-
13
- puts("\tCreating color swatches...")
14
-
15
- # Create a 200x25 image for each named color.
16
- # Label with the name, RGB values, and compliance type.
17
- colors { |c|
18
- if c.name !~ /grey/ then # omit SVG 'grays'
19
- colors.new_image(200, 25) {
20
- self.background_color = c.color
21
- self.border_color = 'gray50'
22
- }
23
- rgb = sprintf('#%02x%02x%02x', c.color.red&0xff, c.color.green&0xff, c.color.blue&0xff)
24
- rgb += sprintf('%02x', c.color.opacity&0xff) if c.color.opacity != 0
25
- m = /(.*?)Compliance/.match c.compliance.to_s
26
- colors.cur_image['Label'] = "#{c.name} (#{rgb}) #{m[1]}"
27
- end
28
- }
29
-
30
- puts("\tCreating montage...")
31
-
32
- # Montage. Each image will have 40 tiles.
33
- # There will be 16 images.
34
- montage = colors.montage {
35
- self.geometry = '200x25+10+5'
36
- self.gravity = CenterGravity
37
- self.tile = '4x10'
38
- self.background_color = 'black'
39
- self.border_width = 1
40
- self.fill = 'white'
41
- self.stroke = 'transparent'
42
- }
43
-
44
- # Add the title at the top, over the 'null:'
45
- # tiles we added at the very beginning.
46
- title = Draw.new
47
- title.annotate(montage, 0,0,0,20, 'Named Colors') {
48
- self.fill = 'white'
49
- self.stroke = 'transparent'
50
- self.pointsize = 32
51
- self.font_weight = BoldWeight
52
- self.gravity = NorthGravity
53
- }
54
-
55
- puts("\tWriting ./colors.miff")
56
- montage.each { |f| f.compression = ZipCompression }
57
- montage.write('colors.miff')
58
-
59
- # Make a small sample of the full montage to display in the HTML file.
60
- sample = montage[8].crop(55, 325, 495, 110)
61
- sample.page = Rectangle.new(495,110)
62
- sample.write('colors.gif')
63
-
64
- exit
@@ -1,23 +0,0 @@
1
- require 'RMagick'
2
-
3
- background = Magick::Image.read('images/Flower_Hat.jpg').first
4
- source = Magick::Image.read('pattern:checkerboard') {self.size = "#{background.columns}x#{background.rows}"}.first
5
- mask = Magick::Image.new(background.columns, background.rows) {self.background_color = "black"}
6
-
7
- # Make a mask
8
- gc = Magick::Draw.new
9
- gc.annotate(mask, 0, 0, 0, 0, "Ruby") do
10
- gc.gravity = Magick::CenterGravity
11
- gc.pointsize = 100
12
- gc.rotation = 90
13
- gc.font_weight = Magick::BoldWeight
14
- gc.fill = "white"
15
- gc.stroke = "none"
16
- end
17
-
18
- background.add_compose_mask(mask)
19
- result = background.composite(source, Magick::CenterGravity, Magick::OverCompositeOp)
20
- result.write "compose_mask_example.jpg"
21
- source.write "compose_mask_source.gif"
22
- mask.write "compose_mask.gif"
23
-
data/doc/ex/composite.rb DELETED
@@ -1,135 +0,0 @@
1
- #! /usr/local/bin/ruby -w
2
-
3
- # Demonstrate the effects of various composite operators.
4
- # Based on ImageMagick's composite test.
5
-
6
- require 'RMagick'
7
- include Magick
8
-
9
- ROWS = 70
10
- COLS = 70
11
- COLOR_A = "#999966"
12
- COLOR_B = "#990066"
13
-
14
- img = Image.new(COLS, ROWS)
15
- triangle = Draw.new
16
- triangle.fill(COLOR_A)
17
- triangle.stroke('transparent')
18
- triangle.polygon(0,0, COLS,0, 0,ROWS, 0,0)
19
- triangle.draw(img)
20
- image_A = img.transparent('white', TransparentOpacity)
21
- image_A['Label'] = 'A'
22
-
23
- img = Image.new(COLS, ROWS)
24
- triangle = Draw.new
25
- triangle.fill(COLOR_B)
26
- triangle.stroke('transparent')
27
- triangle.polygon(0,0, COLS,ROWS, COLS,0, 0,0)
28
- triangle.draw(img)
29
- image_B = img.transparent('white', TransparentOpacity)
30
- image_B['Label'] = 'B'
31
-
32
- list = ImageList.new
33
- null = Image.read("xc:white") { self.size = Geometry.new(COLS,ROWS) }
34
- null = null.first.transparent('white', TransparentOpacity)
35
- null.border_color = 'transparent'
36
- granite = Image.read("granite:")
37
-
38
- list << null.copy
39
- list << image_A
40
- list << image_B
41
- list << null.copy
42
-
43
-
44
- list << image_B.composite(image_A, CenterGravity, OverCompositeOp)
45
- list.cur_image['Label'] = 'A over B'
46
- list << image_A.composite(image_B, CenterGravity, OverCompositeOp)
47
- list.cur_image['Label'] = 'B over A'
48
-
49
- list << image_B.composite(image_A, CenterGravity, InCompositeOp)
50
- list.cur_image['Label'] = 'A in B'
51
- list << image_A.composite(image_B, CenterGravity, InCompositeOp)
52
- list.cur_image['Label'] = 'B in A'
53
-
54
- list << image_B.composite(image_A, CenterGravity, OutCompositeOp)
55
- list.cur_image['Label'] = 'A out B'
56
- list << image_A.composite(image_B, CenterGravity, OutCompositeOp)
57
- list.cur_image['Label'] = 'B out A'
58
-
59
- list << image_B.composite(image_A, CenterGravity, AtopCompositeOp)
60
- list.cur_image['Label'] = 'A atop B'
61
- list << image_A.composite(image_B, CenterGravity, AtopCompositeOp)
62
- list.cur_image['Label'] = 'B atop A'
63
-
64
- list << image_B.composite(image_A, CenterGravity, XorCompositeOp)
65
- list.cur_image['Label'] = 'A xor B'
66
-
67
- list << image_B.composite(image_A, CenterGravity, MultiplyCompositeOp)
68
- list.cur_image['Label'] = 'A multiply B'
69
-
70
- list << image_B.composite(image_A, CenterGravity, ScreenCompositeOp)
71
- list.cur_image['Label'] = 'A screen B'
72
-
73
- list << image_B.composite(image_A, CenterGravity, DarkenCompositeOp)
74
- list.cur_image['Label'] = 'A darken B'
75
-
76
- list << image_B.composite(image_A, CenterGravity, LightenCompositeOp)
77
- list.cur_image['Label'] = 'A lighten B'
78
-
79
- list << image_B.composite(image_A, CenterGravity, PlusCompositeOp)
80
- list.cur_image['Label'] = 'A plus B'
81
-
82
- list << image_B.composite(image_A, CenterGravity, MinusCompositeOp)
83
- list.cur_image['Label'] = 'A minus B'
84
-
85
- list << image_B.composite(image_A, CenterGravity, AddCompositeOp)
86
- list.cur_image['Label'] = 'A add B'
87
-
88
- list << image_B.composite(image_A, CenterGravity, SubtractCompositeOp)
89
- list.cur_image['Label'] = 'A subtract B'
90
-
91
- list << image_B.composite(image_A, CenterGravity, DifferenceCompositeOp)
92
- list.cur_image['Label'] = 'A difference B'
93
-
94
- list << image_B.composite(image_A, CenterGravity, HueCompositeOp)
95
- list.cur_image['Label'] = 'A hue B'
96
-
97
- list << image_B.composite(image_A, CenterGravity, SaturateCompositeOp)
98
- list.cur_image['Label'] = 'A saturate B'
99
-
100
- list << image_B.composite(image_A, CenterGravity, LuminizeCompositeOp)
101
- list.cur_image['Label'] = 'A luminize B'
102
-
103
- list << image_B.composite(image_A, CenterGravity, ColorizeCompositeOp)
104
- list.cur_image['Label'] = 'A colorize B'
105
-
106
- list << image_B.composite(image_A, CenterGravity, BumpmapCompositeOp)
107
- list.cur_image['Label'] = 'A bumpmap B'
108
-
109
- list << image_B.composite(image_A, CenterGravity, DissolveCompositeOp)
110
- list.cur_image['Label'] = 'A dissolve B'
111
-
112
- list << image_B.composite(image_A, CenterGravity, ThresholdCompositeOp)
113
- list.cur_image['Label'] = 'A threshold B'
114
-
115
- list << image_B.composite(image_A, CenterGravity, ModulateCompositeOp)
116
- list.cur_image['Label'] = 'A modulate B'
117
-
118
- list << image_A.composite(image_B, CenterGravity, ModulateCompositeOp)
119
- list.cur_image['Label'] = 'B modulate A'
120
-
121
- list << image_B.composite(image_A, CenterGravity, OverlayCompositeOp)
122
- list.cur_image['Label'] = 'A overlay B'
123
-
124
- montage = list.montage {
125
- self.geometry = Geometry.new(COLS, ROWS, 3, 3)
126
- rows = (list.size+3) / 4
127
- self.tile = Geometry.new(4, rows)
128
- self.texture = granite[0]
129
- self.fill = 'white'
130
- self.stroke = 'transparent'
131
- }
132
-
133
- montage.write('composite.gif')
134
- exit
135
-
@@ -1,53 +0,0 @@
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
@@ -1,23 +0,0 @@
1
- require 'RMagick'
2
-
3
- # Create a transparent image to tile over the background image.
4
- wm = Magick::Image.read("xc:none") { self.size = "100x50" }.first
5
-
6
- # Draw "RMagick" in semi-transparent text on the transparent image.
7
- gc = Magick::Draw.new
8
- gc.fill '#ffffff7f'
9
- gc.font_weight Magick::BoldWeight
10
- gc.font_size 18
11
- gc.rotate 15
12
- gc.gravity Magick::CenterGravity
13
- gc.text 0, 0, "RMagick"
14
- gc.draw wm
15
-
16
- # Read the background image.
17
- img = Magick::Image.read("images/Flower_Hat.jpg").first
18
-
19
- # Composite the tile image over the background image.
20
- img.composite_tiled! wm
21
- img.write "composite_tiled.jpg"
22
-
23
-
data/doc/ex/contrast.rb DELETED
@@ -1,36 +0,0 @@
1
- #! /usr/local/bin/ruby -w
2
- require 'RMagick'
3
-
4
- # Demonstrate the Image#contrast method
5
-
6
- img = Magick::ImageList.new('images/Flower_Hat.jpg')
7
- img.resize!(0.5)
8
-
9
- # Prepare to label each image with a number from 1 to 4
10
- legend = Magick::Draw.new
11
- legend.stroke = 'transparent'
12
- legend.pointsize = 12
13
- legend.gravity = Magick::SouthEastGravity
14
-
15
- # Add 3 images, each one having slightly less contrast
16
- f = 1
17
- 3.times {
18
- img << img.contrast
19
-
20
- # Annotate the previous image
21
- legend.annotate(img[f-1], 0,0,7,10, f.to_s)
22
- f += 1
23
- }
24
-
25
- # Annotate the last image
26
- legend.annotate(img, 0,0,7,10, f.to_s)
27
-
28
- # Montage into a single image
29
- imgs = img.montage {
30
- self.geometry = Magick::Geometry.new(img.columns, img.rows)
31
- self.tile = "2x2"
32
- }
33
-
34
- imgs.write('contrast.jpg')
35
- #imgs.display
36
- exit
data/doc/ex/crop.rb DELETED
@@ -1,31 +0,0 @@
1
- #!/usr/local/bin/ruby -w
2
- require 'RMagick'
3
-
4
- # Demonstrate the Image#crop method
5
-
6
- img = Magick::Image.read('images/Flower_Hat.jpg')[0]
7
-
8
- # Crop the specified rectangle out of the img.
9
- chopped = img.crop(23, 81, 107, 139)
10
-
11
- # Go back to the original and highlight the area
12
- # corresponding to the retained rectangle.
13
- rect = Magick::Draw.new
14
- rect.stroke('transparent')
15
- rect.fill('white')
16
- rect.fill_opacity(0.25)
17
- rect.rectangle(23, 81, 107+23, 139+81)
18
- rect.draw(img)
19
-
20
- img.write('crop_before.png')
21
-
22
- # Create a image to use as a background for
23
- # the "after" image.
24
- bg = Magick::Image.new(img.columns, img.rows) {self.background_color="none"}
25
-
26
- # Composite the the "after" (chopped) image on the background
27
- bg = bg.composite(chopped, 23, 81, Magick::OverCompositeOp)
28
-
29
- bg.write('crop_after.png')
30
-
31
- exit
@@ -1,46 +0,0 @@
1
- #! /usr/local/bin/ruby -w
2
-
3
- #=======================================================#
4
- # Thanks to Robert Wagner for the idea of allowing a #
5
- # GravityType instead of the x- and y-offset arguments! #
6
- #=======================================================#
7
-
8
- # Demo the use of the GravityType argument to Image#crop.
9
-
10
- require 'RMagick'
11
- include Magick
12
-
13
- shorts = Image.read('images/Shorts.jpg').first
14
-
15
- regwidth = shorts.columns/2
16
- regheight = shorts.rows/2
17
-
18
- mask = Image.new(regwidth, regheight) { self.background_color = 'white'}
19
- mask.opacity = 0.50 * TransparentOpacity
20
-
21
- black = Image.new(shorts.columns, shorts.rows) {self.background_color = 'black'}
22
- pairs = ImageList.new
23
-
24
- [NorthWestGravity, NorthGravity, NorthEastGravity,
25
- WestGravity, CenterGravity, EastGravity,
26
- SouthWestGravity, SouthGravity, SouthEastGravity].each do |gravity|
27
- pattern = shorts.composite(mask, gravity, OverCompositeOp)
28
- cropped = shorts.crop(gravity, regwidth, regheight)
29
- result = black.composite(cropped, gravity, OverCompositeOp)
30
- result.border_color = "white"
31
- pairs << pattern
32
- pairs << result
33
- end
34
-
35
- # Montage into a single image
36
- montage = pairs.montage {
37
- self.geometry = "#{pairs.columns}x#{pairs.rows}+0+0"
38
- self.tile = "6x3"
39
- self.border_width = 1
40
- }
41
- montage.write('crop_with_gravity.miff')
42
- #montage.display
43
-
44
-
45
-
46
-