rmagick 3.2.0 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

Files changed (420) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +63 -0
  3. data/.devcontainer/Dockerfile +14 -0
  4. data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
  5. data/.devcontainer/devcontainer.json +11 -0
  6. data/.devcontainer/setup-repo.sh +10 -0
  7. data/.devcontainer/setup-user.sh +45 -0
  8. data/.editorconfig +3 -0
  9. data/.github/ISSUE_TEMPLATE.md +17 -0
  10. data/.github/workflows/ci.yml +79 -0
  11. data/.gitignore +3 -1
  12. data/.rspec +1 -0
  13. data/.rubocop.yml +24 -0
  14. data/.rubocop_todo.yml +151 -297
  15. data/.yardopts +5 -0
  16. data/CHANGELOG.md +233 -0
  17. data/CODE_OF_CONDUCT.md +122 -7
  18. data/CONTRIBUTING.md +14 -10
  19. data/README.md +326 -0
  20. data/Rakefile +16 -22
  21. data/before_install_linux.sh +22 -28
  22. data/before_install_osx.sh +57 -2
  23. data/ext/RMagick/extconf.rb +149 -105
  24. data/ext/RMagick/rmagick.c +77 -104
  25. data/ext/RMagick/rmagick.h +121 -103
  26. data/ext/RMagick/rmdraw.c +364 -436
  27. data/ext/RMagick/rmenum.c +106 -114
  28. data/ext/RMagick/rmfill.c +149 -70
  29. data/ext/RMagick/rmilist.c +225 -367
  30. data/ext/RMagick/rmimage.c +4751 -4405
  31. data/ext/RMagick/rminfo.c +574 -787
  32. data/ext/RMagick/rmkinfo.c +51 -121
  33. data/ext/RMagick/rmmain.c +454 -286
  34. data/ext/RMagick/rmmontage.c +64 -130
  35. data/ext/RMagick/rmpixel.c +488 -437
  36. data/ext/RMagick/rmstruct.c +83 -96
  37. data/ext/RMagick/rmutil.c +302 -214
  38. data/lib/rmagick/version.rb +1 -1
  39. data/lib/rmagick_internal.rb +138 -93
  40. data/lib/rvg/clippath.rb +2 -1
  41. data/lib/rvg/container.rb +10 -5
  42. data/lib/rvg/describable.rb +1 -1
  43. data/lib/rvg/embellishable.rb +5 -4
  44. data/lib/rvg/misc.rb +15 -12
  45. data/lib/rvg/paint.rb +2 -1
  46. data/lib/rvg/pathdata.rb +12 -11
  47. data/lib/rvg/rvg.rb +12 -8
  48. data/lib/rvg/stylable.rb +9 -7
  49. data/lib/rvg/text.rb +11 -6
  50. data/lib/rvg/transformable.rb +3 -2
  51. data/lib/rvg/units.rb +1 -1
  52. data/rmagick.gemspec +10 -11
  53. metadata +52 -423
  54. data/.appveyor.yml +0 -45
  55. data/.circleci/config.yml +0 -56
  56. data/.ruby-version +0 -1
  57. data/.simplecov +0 -27
  58. data/.travis.yml +0 -62
  59. data/Doxyfile +0 -1514
  60. data/README.textile +0 -259
  61. data/benchmarks/memory/README.md +0 -50
  62. data/benchmarks/memory/image_new.rb +0 -8
  63. data/benchmarks/memory/rmagick.gnuplot +0 -16
  64. data/doc/.cvsignore +0 -1
  65. data/doc/comtasks.html +0 -287
  66. data/doc/constants.html +0 -1581
  67. data/doc/css/doc.css +0 -299
  68. data/doc/css/popup.css +0 -34
  69. data/doc/css/ref.css +0 -67
  70. data/doc/draw.html +0 -3272
  71. data/doc/ex/InitialCoords.rb +0 -22
  72. data/doc/ex/NewCoordSys.rb +0 -30
  73. data/doc/ex/OrigCoordSys.rb +0 -16
  74. data/doc/ex/PreserveAspectRatio.rb +0 -204
  75. data/doc/ex/RotateScale.rb +0 -36
  76. data/doc/ex/Skew.rb +0 -38
  77. data/doc/ex/Use01.rb +0 -15
  78. data/doc/ex/Use02.rb +0 -20
  79. data/doc/ex/Use03.rb +0 -16
  80. data/doc/ex/ViewBox.rb +0 -31
  81. data/doc/ex/adaptive_threshold.rb +0 -9
  82. data/doc/ex/add_noise.rb +0 -16
  83. data/doc/ex/affine.rb +0 -48
  84. data/doc/ex/affine_transform.rb +0 -20
  85. data/doc/ex/arc.rb +0 -49
  86. data/doc/ex/arcpath.rb +0 -32
  87. data/doc/ex/arcs01.rb +0 -28
  88. data/doc/ex/arcs02.rb +0 -59
  89. data/doc/ex/average.rb +0 -15
  90. data/doc/ex/axes.rb +0 -64
  91. data/doc/ex/baseline_shift01.rb +0 -17
  92. data/doc/ex/bilevel_channel.rb +0 -8
  93. data/doc/ex/blur_image.rb +0 -12
  94. data/doc/ex/border.rb +0 -10
  95. data/doc/ex/bounding_box.rb +0 -42
  96. data/doc/ex/cbezier1.rb +0 -41
  97. data/doc/ex/cbezier2.rb +0 -41
  98. data/doc/ex/cbezier3.rb +0 -41
  99. data/doc/ex/cbezier4.rb +0 -42
  100. data/doc/ex/cbezier5.rb +0 -42
  101. data/doc/ex/cbezier6.rb +0 -53
  102. data/doc/ex/channel.rb +0 -25
  103. data/doc/ex/charcoal.rb +0 -12
  104. data/doc/ex/chop.rb +0 -29
  105. data/doc/ex/circle.rb +0 -33
  106. data/doc/ex/circle01.rb +0 -16
  107. data/doc/ex/clip_path.rb +0 -60
  108. data/doc/ex/coalesce.rb +0 -57
  109. data/doc/ex/color_fill_to_border.rb +0 -29
  110. data/doc/ex/color_floodfill.rb +0 -28
  111. data/doc/ex/color_histogram.rb +0 -47
  112. data/doc/ex/color_reset.rb +0 -11
  113. data/doc/ex/colorize.rb +0 -16
  114. data/doc/ex/colors.rb +0 -64
  115. data/doc/ex/compose_mask.rb +0 -22
  116. data/doc/ex/composite.rb +0 -133
  117. data/doc/ex/composite_layers.rb +0 -52
  118. data/doc/ex/composite_tiled.rb +0 -21
  119. data/doc/ex/contrast.rb +0 -36
  120. data/doc/ex/crop.rb +0 -31
  121. data/doc/ex/crop_with_gravity.rb +0 -42
  122. data/doc/ex/cubic01.rb +0 -43
  123. data/doc/ex/cubic02.rb +0 -91
  124. data/doc/ex/cycle_colormap.rb +0 -21
  125. data/doc/ex/dissolve.rb +0 -12
  126. data/doc/ex/drawcomp.rb +0 -41
  127. data/doc/ex/drop_shadow.rb +0 -60
  128. data/doc/ex/edge.rb +0 -11
  129. data/doc/ex/ellipse.rb +0 -45
  130. data/doc/ex/ellipse01.rb +0 -21
  131. data/doc/ex/emboss.rb +0 -11
  132. data/doc/ex/enhance.rb +0 -28
  133. data/doc/ex/equalize.rb +0 -11
  134. data/doc/ex/evenodd.rb +0 -42
  135. data/doc/ex/fill_pattern.rb +0 -23
  136. data/doc/ex/flatten_images.rb +0 -36
  137. data/doc/ex/flip.rb +0 -11
  138. data/doc/ex/flop.rb +0 -11
  139. data/doc/ex/font_styles.rb +0 -32
  140. data/doc/ex/fonts.rb +0 -16
  141. data/doc/ex/frame.rb +0 -12
  142. data/doc/ex/gaussian_blur.rb +0 -11
  143. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  144. data/doc/ex/get_pixels.rb +0 -45
  145. data/doc/ex/get_type_metrics.rb +0 -142
  146. data/doc/ex/gradientfill.rb +0 -27
  147. data/doc/ex/grav.rb +0 -45
  148. data/doc/ex/gravity.rb +0 -78
  149. data/doc/ex/group.rb +0 -26
  150. data/doc/ex/hatchfill.rb +0 -27
  151. data/doc/ex/image.rb +0 -44
  152. data/doc/ex/images/Apple.miff +0 -0
  153. data/doc/ex/images/Ballerina.jpg +0 -0
  154. data/doc/ex/images/Ballerina3.jpg +0 -0
  155. data/doc/ex/images/Button_0.gif +0 -0
  156. data/doc/ex/images/Button_1.gif +0 -0
  157. data/doc/ex/images/Button_2.gif +0 -0
  158. data/doc/ex/images/Button_3.gif +0 -0
  159. data/doc/ex/images/Button_4.gif +0 -0
  160. data/doc/ex/images/Button_5.gif +0 -0
  161. data/doc/ex/images/Button_6.gif +0 -0
  162. data/doc/ex/images/Button_7.gif +0 -0
  163. data/doc/ex/images/Button_8.gif +0 -0
  164. data/doc/ex/images/Button_9.gif +0 -0
  165. data/doc/ex/images/Button_A.gif +0 -0
  166. data/doc/ex/images/Button_B.gif +0 -0
  167. data/doc/ex/images/Button_C.gif +0 -0
  168. data/doc/ex/images/Button_D.gif +0 -0
  169. data/doc/ex/images/Button_E.gif +0 -0
  170. data/doc/ex/images/Button_F.gif +0 -0
  171. data/doc/ex/images/Button_G.gif +0 -0
  172. data/doc/ex/images/Button_H.gif +0 -0
  173. data/doc/ex/images/Button_I.gif +0 -0
  174. data/doc/ex/images/Button_J.gif +0 -0
  175. data/doc/ex/images/Button_K.gif +0 -0
  176. data/doc/ex/images/Button_L.gif +0 -0
  177. data/doc/ex/images/Button_M.gif +0 -0
  178. data/doc/ex/images/Button_N.gif +0 -0
  179. data/doc/ex/images/Button_O.gif +0 -0
  180. data/doc/ex/images/Button_P.gif +0 -0
  181. data/doc/ex/images/Button_Q.gif +0 -0
  182. data/doc/ex/images/Button_R.gif +0 -0
  183. data/doc/ex/images/Button_S.gif +0 -0
  184. data/doc/ex/images/Button_T.gif +0 -0
  185. data/doc/ex/images/Button_U.gif +0 -0
  186. data/doc/ex/images/Button_V.gif +0 -0
  187. data/doc/ex/images/Button_W.gif +0 -0
  188. data/doc/ex/images/Button_X.gif +0 -0
  189. data/doc/ex/images/Button_Y.gif +0 -0
  190. data/doc/ex/images/Button_Z.gif +0 -0
  191. data/doc/ex/images/Cheetah.jpg +0 -0
  192. data/doc/ex/images/Coffee.png +0 -0
  193. data/doc/ex/images/Flower_Hat.jpg +0 -0
  194. data/doc/ex/images/Gold_Statue.jpg +0 -0
  195. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  196. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  197. data/doc/ex/images/Leaf.miff +0 -0
  198. data/doc/ex/images/No.png +0 -0
  199. data/doc/ex/images/Polynesia.jpg +0 -0
  200. data/doc/ex/images/Red_Rocks.jpg +0 -0
  201. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  202. data/doc/ex/images/Shorts.jpg +0 -0
  203. data/doc/ex/images/Snake.png +0 -0
  204. data/doc/ex/images/Violin.jpg +0 -0
  205. data/doc/ex/images/Yellow_Rose.miff +0 -0
  206. data/doc/ex/images/big-duck.gif +0 -0
  207. data/doc/ex/images/duck.gif +0 -0
  208. data/doc/ex/images/duck0.gif +0 -0
  209. data/doc/ex/images/duck1.gif +0 -0
  210. data/doc/ex/images/duck10.gif +0 -0
  211. data/doc/ex/images/duck11.gif +0 -0
  212. data/doc/ex/images/duck12.gif +0 -0
  213. data/doc/ex/images/duck13.gif +0 -0
  214. data/doc/ex/images/duck14.gif +0 -0
  215. data/doc/ex/images/duck15.gif +0 -0
  216. data/doc/ex/images/duck2.gif +0 -0
  217. data/doc/ex/images/duck3.gif +0 -0
  218. data/doc/ex/images/duck4.gif +0 -0
  219. data/doc/ex/images/duck5.gif +0 -0
  220. data/doc/ex/images/duck6.gif +0 -0
  221. data/doc/ex/images/duck7.gif +0 -0
  222. data/doc/ex/images/duck8.gif +0 -0
  223. data/doc/ex/images/duck9.gif +0 -0
  224. data/doc/ex/images/graydient230x6.gif +0 -0
  225. data/doc/ex/images/image_with_profile.jpg +0 -0
  226. data/doc/ex/images/logo400x83.gif +0 -0
  227. data/doc/ex/images/model.miff +0 -0
  228. data/doc/ex/images/notimplemented.gif +0 -0
  229. data/doc/ex/images/smile.miff +0 -0
  230. data/doc/ex/images/spin.gif +0 -0
  231. data/doc/ex/implode.rb +0 -34
  232. data/doc/ex/level.rb +0 -11
  233. data/doc/ex/level_colors.rb +0 -11
  234. data/doc/ex/line.rb +0 -41
  235. data/doc/ex/line01.rb +0 -21
  236. data/doc/ex/mask.rb +0 -35
  237. data/doc/ex/matte_fill_to_border.rb +0 -39
  238. data/doc/ex/matte_floodfill.rb +0 -32
  239. data/doc/ex/matte_replace.rb +0 -39
  240. data/doc/ex/median_filter.rb +0 -28
  241. data/doc/ex/modulate.rb +0 -11
  242. data/doc/ex/mono.rb +0 -23
  243. data/doc/ex/morph.rb +0 -25
  244. data/doc/ex/mosaic.rb +0 -37
  245. data/doc/ex/motion_blur.rb +0 -11
  246. data/doc/ex/negate.rb +0 -11
  247. data/doc/ex/negate_channel.rb +0 -9
  248. data/doc/ex/nested_rvg.rb +0 -21
  249. data/doc/ex/nonzero.rb +0 -42
  250. data/doc/ex/normalize.rb +0 -11
  251. data/doc/ex/oil_paint.rb +0 -11
  252. data/doc/ex/opacity.rb +0 -37
  253. data/doc/ex/ordered_dither.rb +0 -11
  254. data/doc/ex/path.rb +0 -63
  255. data/doc/ex/pattern1.rb +0 -25
  256. data/doc/ex/pattern2.rb +0 -26
  257. data/doc/ex/polaroid.rb +0 -26
  258. data/doc/ex/polygon.rb +0 -23
  259. data/doc/ex/polygon01.rb +0 -21
  260. data/doc/ex/polyline.rb +0 -22
  261. data/doc/ex/polyline01.rb +0 -21
  262. data/doc/ex/posterize.rb +0 -8
  263. data/doc/ex/preview.rb +0 -8
  264. data/doc/ex/qbezierpath.rb +0 -52
  265. data/doc/ex/quad01.rb +0 -34
  266. data/doc/ex/quantize-m.rb +0 -25
  267. data/doc/ex/radial_blur.rb +0 -9
  268. data/doc/ex/raise.rb +0 -8
  269. data/doc/ex/random_threshold_channel.rb +0 -13
  270. data/doc/ex/rect01.rb +0 -14
  271. data/doc/ex/rect02.rb +0 -20
  272. data/doc/ex/rectangle.rb +0 -34
  273. data/doc/ex/reduce_noise.rb +0 -28
  274. data/doc/ex/remap.rb +0 -11
  275. data/doc/ex/remap_images.rb +0 -19
  276. data/doc/ex/resize_to_fill.rb +0 -8
  277. data/doc/ex/resize_to_fit.rb +0 -8
  278. data/doc/ex/roll.rb +0 -9
  279. data/doc/ex/rotate.rb +0 -44
  280. data/doc/ex/rotate_f.rb +0 -14
  281. data/doc/ex/roundrect.rb +0 -33
  282. data/doc/ex/rubyname.rb +0 -30
  283. data/doc/ex/rvg_clippath.rb +0 -12
  284. data/doc/ex/rvg_linecap.rb +0 -42
  285. data/doc/ex/rvg_linejoin.rb +0 -40
  286. data/doc/ex/rvg_opacity.rb +0 -18
  287. data/doc/ex/rvg_pattern.rb +0 -26
  288. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  289. data/doc/ex/segment.rb +0 -11
  290. data/doc/ex/sepiatone.rb +0 -7
  291. data/doc/ex/shade.rb +0 -11
  292. data/doc/ex/shadow.rb +0 -30
  293. data/doc/ex/shave.rb +0 -15
  294. data/doc/ex/shear.rb +0 -10
  295. data/doc/ex/sketch.rb +0 -17
  296. data/doc/ex/skewx.rb +0 -51
  297. data/doc/ex/skewy.rb +0 -47
  298. data/doc/ex/smile.rb +0 -126
  299. data/doc/ex/solarize.rb +0 -11
  300. data/doc/ex/sparse_color.rb +0 -55
  301. data/doc/ex/splice.rb +0 -8
  302. data/doc/ex/spread.rb +0 -11
  303. data/doc/ex/stegano.rb +0 -54
  304. data/doc/ex/stroke_dasharray.rb +0 -42
  305. data/doc/ex/stroke_fill.rb +0 -10
  306. data/doc/ex/stroke_linecap.rb +0 -44
  307. data/doc/ex/stroke_linejoin.rb +0 -48
  308. data/doc/ex/stroke_width.rb +0 -49
  309. data/doc/ex/swirl.rb +0 -17
  310. data/doc/ex/text.rb +0 -37
  311. data/doc/ex/text01.rb +0 -16
  312. data/doc/ex/text_align.rb +0 -36
  313. data/doc/ex/text_antialias.rb +0 -37
  314. data/doc/ex/text_styles.rb +0 -19
  315. data/doc/ex/text_undercolor.rb +0 -28
  316. data/doc/ex/texture_fill_to_border.rb +0 -34
  317. data/doc/ex/texture_floodfill.rb +0 -32
  318. data/doc/ex/texturefill.rb +0 -24
  319. data/doc/ex/threshold.rb +0 -13
  320. data/doc/ex/to_blob.rb +0 -13
  321. data/doc/ex/translate.rb +0 -39
  322. data/doc/ex/transparent.rb +0 -38
  323. data/doc/ex/transpose.rb +0 -9
  324. data/doc/ex/transverse.rb +0 -9
  325. data/doc/ex/tref01.rb +0 -24
  326. data/doc/ex/triangle01.rb +0 -15
  327. data/doc/ex/trim.rb +0 -23
  328. data/doc/ex/tspan01.rb +0 -17
  329. data/doc/ex/tspan02.rb +0 -17
  330. data/doc/ex/tspan03.rb +0 -19
  331. data/doc/ex/unsharp_mask.rb +0 -28
  332. data/doc/ex/viewex.rb +0 -33
  333. data/doc/ex/vignette.rb +0 -12
  334. data/doc/ex/watermark.rb +0 -27
  335. data/doc/ex/wave.rb +0 -9
  336. data/doc/ex/wet_floor.rb +0 -58
  337. data/doc/ex/writing_mode01.rb +0 -26
  338. data/doc/ex/writing_mode02.rb +0 -26
  339. data/doc/ilist.html +0 -2056
  340. data/doc/image1.html +0 -4680
  341. data/doc/image2.html +0 -3665
  342. data/doc/image3.html +0 -4522
  343. data/doc/imageattrs.html +0 -1638
  344. data/doc/imusage.html +0 -514
  345. data/doc/index.html +0 -416
  346. data/doc/info.html +0 -1499
  347. data/doc/magick.html +0 -570
  348. data/doc/optequiv.html +0 -2435
  349. data/doc/rvg.html +0 -975
  350. data/doc/rvgclip.html +0 -248
  351. data/doc/rvggroup.html +0 -305
  352. data/doc/rvgimage.html +0 -289
  353. data/doc/rvgpattern.html +0 -475
  354. data/doc/rvgshape.html +0 -406
  355. data/doc/rvgstyle.html +0 -270
  356. data/doc/rvgtext.html +0 -465
  357. data/doc/rvgtspan.html +0 -238
  358. data/doc/rvgtut.html +0 -530
  359. data/doc/rvguse.html +0 -145
  360. data/doc/rvgxform.html +0 -294
  361. data/doc/scripts/doc.js +0 -22
  362. data/doc/scripts/stripeTables.js +0 -23
  363. data/doc/struct.html +0 -1339
  364. data/doc/usage.html +0 -1621
  365. data/examples/constitute.rb +0 -7
  366. data/examples/crop_with_gravity.rb +0 -42
  367. data/examples/demo.rb +0 -323
  368. data/examples/describe.rb +0 -41
  369. data/examples/find_similar_region.rb +0 -34
  370. data/examples/histogram.rb +0 -312
  371. data/examples/identify.rb +0 -174
  372. data/examples/image_opacity.rb +0 -28
  373. data/examples/import_export.rb +0 -31
  374. data/examples/pattern_fill.rb +0 -37
  375. data/examples/rotating_text.rb +0 -45
  376. data/examples/spinner.rb +0 -49
  377. data/examples/thumbnail.rb +0 -64
  378. data/examples/vignette.rb +0 -78
  379. data/lib/obsolete.rb +0 -66
  380. data/spec/rmagick/ImageList1_spec.rb +0 -24
  381. data/spec/rmagick/draw_spec.rb +0 -155
  382. data/spec/rmagick/image/blue_shift_spec.rb +0 -14
  383. data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
  384. data/spec/rmagick/image/composite_spec.rb +0 -72
  385. data/spec/rmagick/image/constitute_spec.rb +0 -13
  386. data/spec/rmagick/image/dispatch_spec.rb +0 -16
  387. data/spec/rmagick/image/from_blob_spec.rb +0 -12
  388. data/spec/rmagick/image/ping_spec.rb +0 -12
  389. data/spec/rmagick/image/properties_spec.rb +0 -27
  390. data/spec/rmagick/image/read_spec.rb +0 -28
  391. data/spec/spec_helper.rb +0 -10
  392. data/spec/support/issue_200/app.rb +0 -8
  393. data/test/Draw.rb +0 -351
  394. data/test/Enum.rb +0 -228
  395. data/test/Fill.rb +0 -93
  396. data/test/Image1.rb +0 -627
  397. data/test/Image2.rb +0 -1426
  398. data/test/Image3.rb +0 -1091
  399. data/test/ImageList1.rb +0 -858
  400. data/test/ImageList2.rb +0 -406
  401. data/test/Image_attributes.rb +0 -666
  402. data/test/Import_Export.rb +0 -115
  403. data/test/Info.rb +0 -444
  404. data/test/KernelInfo.rb +0 -67
  405. data/test/Magick.rb +0 -311
  406. data/test/Pixel.rb +0 -285
  407. data/test/PolaroidOptions.rb +0 -23
  408. data/test/Preview.rb +0 -26
  409. data/test/Struct.rb +0 -45
  410. data/test/appearance/Montage.rb +0 -26
  411. data/test/appearance/appearance_assertion.rb +0 -13
  412. data/test/appearance/expected/montage_border_color.jpg +0 -0
  413. data/test/cmyk.icm +0 -0
  414. data/test/lib/Obsolete.rb +0 -30
  415. data/test/lib/internal/Draw.rb +0 -823
  416. data/test/lib/internal/Geometry.rb +0 -98
  417. data/test/lib/internal/Magick.rb +0 -40
  418. data/test/srgb.icm +0 -0
  419. data/test/test_all_basic.rb +0 -49
  420. data/test/tmpnam_test.rb +0 -50
data/doc/ex/coalesce.rb DELETED
@@ -1,57 +0,0 @@
1
- #!/usr/bin/env 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 do
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
- end
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.alpha(Magick::ActivateAlphaChannel)
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 do |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.alpha(Magick::ActivateAlphaChannel)
48
- cells << button
49
- end
50
-
51
- puts 'This may take a few seconds...'
52
- cells.delay = 10
53
- cells.iterations = 10_000
54
- res = cells.coalesce
55
- res.write 'coalesce_anim.gif'
56
- res[25].write 'coalesce.gif'
57
- exit
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require 'rmagick'
3
-
4
- # Demonstrate the Image#color_fill_to_border method
5
-
6
- before = Magick::Image.new(200, 200) do
7
- self.background_color = 'white'
8
- self.border_color = 'black'
9
- end
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/bin/env 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,47 +0,0 @@
1
- #!/usr/bin/env 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 do |pixel|
26
- gc.stroke(pixel.to_color)
27
- gc.line(start, 0, start, hist[pixel])
28
- start = start.succ
29
- end
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") do
37
- self.pointsize = 10
38
- self.gravity = Magick::NorthGravity
39
- self.stroke = 'transparent'
40
- end
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
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env 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/bin/env 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/bin/env 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 do |c|
18
- if c.name !~ /grey/ # omit SVG 'grays'
19
- colors.new_image(200, 25) do
20
- self.background_color = c.color
21
- self.border_color = 'gray50'
22
- end
23
- rgb = format('#%02x%02x%02x', c.color.red & 0xff, c.color.green & 0xff, c.color.blue & 0xff)
24
- rgb += format('%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
- end
29
-
30
- puts("\tCreating montage...")
31
-
32
- # Montage. Each image will have 40 tiles.
33
- # There will be 16 images.
34
- montage = colors.montage do
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
- end
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') do
48
- self.fill = 'white'
49
- self.stroke = 'transparent'
50
- self.pointsize = 32
51
- self.font_weight = BoldWeight
52
- self.gravity = NorthGravity
53
- end
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,22 +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'
data/doc/ex/composite.rb DELETED
@@ -1,133 +0,0 @@
1
- #!/usr/bin/env 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
- list << image__b.composite(image_a, CenterGravity, OverCompositeOp)
44
- list.cur_image['Label'] = 'A over B'
45
- list << image_a.composite(image__b, CenterGravity, OverCompositeOp)
46
- list.cur_image['Label'] = 'B over A'
47
-
48
- list << image__b.composite(image_a, CenterGravity, InCompositeOp)
49
- list.cur_image['Label'] = 'A in B'
50
- list << image_a.composite(image__b, CenterGravity, InCompositeOp)
51
- list.cur_image['Label'] = 'B in A'
52
-
53
- list << image__b.composite(image_a, CenterGravity, OutCompositeOp)
54
- list.cur_image['Label'] = 'A out B'
55
- list << image_a.composite(image__b, CenterGravity, OutCompositeOp)
56
- list.cur_image['Label'] = 'B out A'
57
-
58
- list << image__b.composite(image_a, CenterGravity, AtopCompositeOp)
59
- list.cur_image['Label'] = 'A atop B'
60
- list << image_a.composite(image__b, CenterGravity, AtopCompositeOp)
61
- list.cur_image['Label'] = 'B atop A'
62
-
63
- list << image__b.composite(image_a, CenterGravity, XorCompositeOp)
64
- list.cur_image['Label'] = 'A xor B'
65
-
66
- list << image__b.composite(image_a, CenterGravity, MultiplyCompositeOp)
67
- list.cur_image['Label'] = 'A multiply B'
68
-
69
- list << image__b.composite(image_a, CenterGravity, ScreenCompositeOp)
70
- list.cur_image['Label'] = 'A screen B'
71
-
72
- list << image__b.composite(image_a, CenterGravity, DarkenCompositeOp)
73
- list.cur_image['Label'] = 'A darken B'
74
-
75
- list << image__b.composite(image_a, CenterGravity, LightenCompositeOp)
76
- list.cur_image['Label'] = 'A lighten B'
77
-
78
- list << image__b.composite(image_a, CenterGravity, PlusCompositeOp)
79
- list.cur_image['Label'] = 'A plus B'
80
-
81
- list << image__b.composite(image_a, CenterGravity, MinusCompositeOp)
82
- list.cur_image['Label'] = 'A minus B'
83
-
84
- list << image__b.composite(image_a, CenterGravity, AddCompositeOp)
85
- list.cur_image['Label'] = 'A add B'
86
-
87
- list << image__b.composite(image_a, CenterGravity, SubtractCompositeOp)
88
- list.cur_image['Label'] = 'A subtract B'
89
-
90
- list << image__b.composite(image_a, CenterGravity, DifferenceCompositeOp)
91
- list.cur_image['Label'] = 'A difference B'
92
-
93
- list << image__b.composite(image_a, CenterGravity, HueCompositeOp)
94
- list.cur_image['Label'] = 'A hue B'
95
-
96
- list << image__b.composite(image_a, CenterGravity, SaturateCompositeOp)
97
- list.cur_image['Label'] = 'A saturate B'
98
-
99
- list << image__b.composite(image_a, CenterGravity, LuminizeCompositeOp)
100
- list.cur_image['Label'] = 'A luminize B'
101
-
102
- list << image__b.composite(image_a, CenterGravity, ColorizeCompositeOp)
103
- list.cur_image['Label'] = 'A colorize B'
104
-
105
- list << image__b.composite(image_a, CenterGravity, BumpmapCompositeOp)
106
- list.cur_image['Label'] = 'A bumpmap B'
107
-
108
- list << image__b.composite(image_a, CenterGravity, DissolveCompositeOp)
109
- list.cur_image['Label'] = 'A dissolve B'
110
-
111
- list << image__b.composite(image_a, CenterGravity, ThresholdCompositeOp)
112
- list.cur_image['Label'] = 'A threshold B'
113
-
114
- list << image__b.composite(image_a, CenterGravity, ModulateCompositeOp)
115
- list.cur_image['Label'] = 'A modulate B'
116
-
117
- list << image_a.composite(image__b, CenterGravity, ModulateCompositeOp)
118
- list.cur_image['Label'] = 'B modulate A'
119
-
120
- list << image__b.composite(image_a, CenterGravity, OverlayCompositeOp)
121
- list.cur_image['Label'] = 'A overlay B'
122
-
123
- montage = list.montage do
124
- self.geometry = Geometry.new(COLS, ROWS, 3, 3)
125
- rows = (list.size + 3) / 4
126
- self.tile = Geometry.new(4, rows)
127
- self.texture = granite[0]
128
- self.fill = 'white'
129
- self.stroke = 'transparent'
130
- end
131
-
132
- montage.write('composite.gif')
133
- exit
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env 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
- 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
- rescue NotImplementedError
47
- result = Magick::Image.read('images/notimplemented.gif').first
48
- result.resize!(100, 100)
49
- result.write('composite_layers.gif')
50
- result.write('composite_layers1.gif')
51
- end
52
- exit
@@ -1,21 +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'
data/doc/ex/contrast.rb DELETED
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env 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 do
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
- end
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 do
30
- self.geometry = Magick::Geometry.new(img.columns, img.rows)
31
- self.tile = '2x2'
32
- end
33
-
34
- imgs.write('contrast.jpg')
35
- # imgs.display
36
- exit
data/doc/ex/crop.rb DELETED
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env 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,42 +0,0 @@
1
- #!/usr/bin/env 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 do
37
- self.geometry = "#{pairs.columns}x#{pairs.rows}+0+0"
38
- self.tile = '6x3'
39
- self.border_width = 1
40
- end
41
- montage.write('crop_with_gravity.miff')
42
- # montage.display
data/doc/ex/cubic01.rb DELETED
@@ -1,43 +0,0 @@
1
- require 'rvg/rvg'
2
-
3
- Magick::RVG.dpi = 90
4
-
5
- Border = { fill: 'none', stroke: 'blue', stroke_width: 1 }
6
- Connect = { fill: 'none', stroke: '#888', stroke_width: 2 }
7
- SamplePath = { fill: 'none', stroke: 'red', stroke_width: 5 }
8
- EndPoint = { fill: 'none', stroke: '#888', stroke_width: 2 }
9
- CtlPoint = { fill: '#888', stroke: 'none' }
10
- AutoCtlPoint = { fill: 'none', stroke: 'blue', stroke_width: 4 }
11
- Label = { font_size: 22, font_family: 'Verdana', font_weight: 'normal', font_style: 'normal' }
12
-
13
- rvg = Magick::RVG.new(5.cm, 4.cm).viewbox(0, 0, 500, 400) do |canvas|
14
- canvas.title = 'Example cubic01 - cubic Bezier commands in path data'
15
- canvas.desc = <<-END_DESC
16
- Picture showing a simple example of path data using both a
17
- "C" and an "S" command, along with annotations showing the
18
- control points and end points.
19
- END_DESC
20
-
21
- canvas.background_fill = 'white'
22
- canvas.rect(496, 395, 1, 1).styles(Border)
23
-
24
- canvas.polyline(100, 200, 100, 100).styles(Connect)
25
- canvas.polyline(250, 100, 250, 200).styles(Connect)
26
- canvas.polyline(250, 200, 250, 300).styles(Connect)
27
- canvas.polyline(400, 300, 400, 200).styles(Connect)
28
-
29
- canvas.path('M100,200 C100,100 250,100 250,200 S400,300 400,200').styles(SamplePath)
30
-
31
- canvas.circle(10, 100, 200).styles(EndPoint)
32
- canvas.circle(10, 250, 200).styles(EndPoint)
33
- canvas.circle(10, 400, 200).styles(EndPoint)
34
- canvas.circle(10, 100, 100).styles(CtlPoint)
35
- canvas.circle(10, 250, 100).styles(CtlPoint)
36
- canvas.circle(10, 400, 300).styles(CtlPoint)
37
- canvas.circle(9, 250, 300).styles(AutoCtlPoint)
38
-
39
- canvas.text(25, 70, 'M100,200 C100,100 250,100 250,200').styles(Label)
40
- canvas.text(225, 350, 'S400,300 400,200').styles(Label)
41
- end
42
-
43
- rvg.draw.write('cubic01.gif')