rmagick 4.1.0.rc2 → 4.1.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 (412) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +3 -0
  4. data/.github/workflows/ci.yml +148 -0
  5. data/.gitignore +3 -1
  6. data/.rspec +1 -0
  7. data/.rubocop.yml +24 -0
  8. data/.rubocop_todo.yml +80 -270
  9. data/.yardopts +5 -0
  10. data/CHANGELOG.md +63 -0
  11. data/CONTRIBUTING.md +14 -10
  12. data/README.md +292 -0
  13. data/Rakefile +16 -22
  14. data/before_install_linux.sh +22 -32
  15. data/before_install_osx.sh +56 -2
  16. data/ext/RMagick/extconf.rb +100 -94
  17. data/ext/RMagick/rmagick.c +77 -104
  18. data/ext/RMagick/rmagick.h +74 -70
  19. data/ext/RMagick/rmdraw.c +261 -444
  20. data/ext/RMagick/rmenum.c +96 -113
  21. data/ext/RMagick/rmfill.c +46 -77
  22. data/ext/RMagick/rmilist.c +136 -244
  23. data/ext/RMagick/rmimage.c +3395 -4166
  24. data/ext/RMagick/rminfo.c +531 -737
  25. data/ext/RMagick/rmkinfo.c +21 -87
  26. data/ext/RMagick/rmmain.c +405 -245
  27. data/ext/RMagick/rmmontage.c +60 -126
  28. data/ext/RMagick/rmpixel.c +401 -345
  29. data/ext/RMagick/rmstruct.c +62 -88
  30. data/ext/RMagick/rmutil.c +112 -218
  31. data/lib/rmagick/version.rb +1 -1
  32. data/lib/rmagick_internal.rb +128 -77
  33. data/lib/rvg/clippath.rb +2 -1
  34. data/lib/rvg/container.rb +10 -5
  35. data/lib/rvg/describable.rb +1 -1
  36. data/lib/rvg/embellishable.rb +5 -4
  37. data/lib/rvg/misc.rb +15 -12
  38. data/lib/rvg/paint.rb +2 -1
  39. data/lib/rvg/pathdata.rb +12 -11
  40. data/lib/rvg/rvg.rb +8 -4
  41. data/lib/rvg/stylable.rb +9 -7
  42. data/lib/rvg/text.rb +11 -6
  43. data/lib/rvg/transformable.rb +3 -2
  44. data/lib/rvg/units.rb +1 -1
  45. data/rmagick.gemspec +7 -6
  46. metadata +31 -421
  47. data/.appveyor.yml +0 -57
  48. data/.circleci/config.yml +0 -56
  49. data/.ruby-version +0 -1
  50. data/.simplecov +0 -27
  51. data/.travis.yml +0 -64
  52. data/Doxyfile +0 -1514
  53. data/README.textile +0 -259
  54. data/benchmarks/memory/README.md +0 -50
  55. data/benchmarks/memory/image_new.rb +0 -8
  56. data/benchmarks/memory/rmagick.gnuplot +0 -16
  57. data/doc/.cvsignore +0 -1
  58. data/doc/comtasks.html +0 -287
  59. data/doc/constants.html +0 -1581
  60. data/doc/css/doc.css +0 -299
  61. data/doc/css/popup.css +0 -34
  62. data/doc/css/ref.css +0 -67
  63. data/doc/draw.html +0 -3272
  64. data/doc/ex/InitialCoords.rb +0 -22
  65. data/doc/ex/NewCoordSys.rb +0 -30
  66. data/doc/ex/OrigCoordSys.rb +0 -16
  67. data/doc/ex/PreserveAspectRatio.rb +0 -204
  68. data/doc/ex/RotateScale.rb +0 -36
  69. data/doc/ex/Skew.rb +0 -38
  70. data/doc/ex/Use01.rb +0 -15
  71. data/doc/ex/Use02.rb +0 -20
  72. data/doc/ex/Use03.rb +0 -16
  73. data/doc/ex/ViewBox.rb +0 -31
  74. data/doc/ex/adaptive_threshold.rb +0 -9
  75. data/doc/ex/add_noise.rb +0 -16
  76. data/doc/ex/affine.rb +0 -48
  77. data/doc/ex/affine_transform.rb +0 -20
  78. data/doc/ex/arc.rb +0 -49
  79. data/doc/ex/arcpath.rb +0 -32
  80. data/doc/ex/arcs01.rb +0 -28
  81. data/doc/ex/arcs02.rb +0 -59
  82. data/doc/ex/average.rb +0 -15
  83. data/doc/ex/axes.rb +0 -64
  84. data/doc/ex/baseline_shift01.rb +0 -17
  85. data/doc/ex/bilevel_channel.rb +0 -8
  86. data/doc/ex/blur_image.rb +0 -12
  87. data/doc/ex/border.rb +0 -10
  88. data/doc/ex/bounding_box.rb +0 -42
  89. data/doc/ex/cbezier1.rb +0 -41
  90. data/doc/ex/cbezier2.rb +0 -41
  91. data/doc/ex/cbezier3.rb +0 -41
  92. data/doc/ex/cbezier4.rb +0 -42
  93. data/doc/ex/cbezier5.rb +0 -42
  94. data/doc/ex/cbezier6.rb +0 -53
  95. data/doc/ex/channel.rb +0 -25
  96. data/doc/ex/charcoal.rb +0 -12
  97. data/doc/ex/chop.rb +0 -29
  98. data/doc/ex/circle.rb +0 -33
  99. data/doc/ex/circle01.rb +0 -16
  100. data/doc/ex/clip_path.rb +0 -60
  101. data/doc/ex/coalesce.rb +0 -57
  102. data/doc/ex/color_fill_to_border.rb +0 -29
  103. data/doc/ex/color_floodfill.rb +0 -28
  104. data/doc/ex/color_histogram.rb +0 -47
  105. data/doc/ex/color_reset.rb +0 -11
  106. data/doc/ex/colorize.rb +0 -16
  107. data/doc/ex/colors.rb +0 -64
  108. data/doc/ex/compose_mask.rb +0 -22
  109. data/doc/ex/composite.rb +0 -133
  110. data/doc/ex/composite_layers.rb +0 -52
  111. data/doc/ex/composite_tiled.rb +0 -21
  112. data/doc/ex/contrast.rb +0 -36
  113. data/doc/ex/crop.rb +0 -31
  114. data/doc/ex/crop_with_gravity.rb +0 -42
  115. data/doc/ex/cubic01.rb +0 -43
  116. data/doc/ex/cubic02.rb +0 -91
  117. data/doc/ex/cycle_colormap.rb +0 -21
  118. data/doc/ex/dissolve.rb +0 -12
  119. data/doc/ex/drawcomp.rb +0 -41
  120. data/doc/ex/drop_shadow.rb +0 -60
  121. data/doc/ex/edge.rb +0 -11
  122. data/doc/ex/ellipse.rb +0 -45
  123. data/doc/ex/ellipse01.rb +0 -21
  124. data/doc/ex/emboss.rb +0 -11
  125. data/doc/ex/enhance.rb +0 -28
  126. data/doc/ex/equalize.rb +0 -11
  127. data/doc/ex/evenodd.rb +0 -42
  128. data/doc/ex/fill_pattern.rb +0 -23
  129. data/doc/ex/flatten_images.rb +0 -36
  130. data/doc/ex/flip.rb +0 -11
  131. data/doc/ex/flop.rb +0 -11
  132. data/doc/ex/font_styles.rb +0 -32
  133. data/doc/ex/fonts.rb +0 -16
  134. data/doc/ex/frame.rb +0 -12
  135. data/doc/ex/gaussian_blur.rb +0 -11
  136. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  137. data/doc/ex/get_pixels.rb +0 -45
  138. data/doc/ex/get_type_metrics.rb +0 -142
  139. data/doc/ex/gradientfill.rb +0 -27
  140. data/doc/ex/grav.rb +0 -45
  141. data/doc/ex/gravity.rb +0 -78
  142. data/doc/ex/group.rb +0 -26
  143. data/doc/ex/hatchfill.rb +0 -27
  144. data/doc/ex/image.rb +0 -44
  145. data/doc/ex/images/Apple.miff +0 -0
  146. data/doc/ex/images/Ballerina.jpg +0 -0
  147. data/doc/ex/images/Ballerina3.jpg +0 -0
  148. data/doc/ex/images/Button_0.gif +0 -0
  149. data/doc/ex/images/Button_1.gif +0 -0
  150. data/doc/ex/images/Button_2.gif +0 -0
  151. data/doc/ex/images/Button_3.gif +0 -0
  152. data/doc/ex/images/Button_4.gif +0 -0
  153. data/doc/ex/images/Button_5.gif +0 -0
  154. data/doc/ex/images/Button_6.gif +0 -0
  155. data/doc/ex/images/Button_7.gif +0 -0
  156. data/doc/ex/images/Button_8.gif +0 -0
  157. data/doc/ex/images/Button_9.gif +0 -0
  158. data/doc/ex/images/Button_A.gif +0 -0
  159. data/doc/ex/images/Button_B.gif +0 -0
  160. data/doc/ex/images/Button_C.gif +0 -0
  161. data/doc/ex/images/Button_D.gif +0 -0
  162. data/doc/ex/images/Button_E.gif +0 -0
  163. data/doc/ex/images/Button_F.gif +0 -0
  164. data/doc/ex/images/Button_G.gif +0 -0
  165. data/doc/ex/images/Button_H.gif +0 -0
  166. data/doc/ex/images/Button_I.gif +0 -0
  167. data/doc/ex/images/Button_J.gif +0 -0
  168. data/doc/ex/images/Button_K.gif +0 -0
  169. data/doc/ex/images/Button_L.gif +0 -0
  170. data/doc/ex/images/Button_M.gif +0 -0
  171. data/doc/ex/images/Button_N.gif +0 -0
  172. data/doc/ex/images/Button_O.gif +0 -0
  173. data/doc/ex/images/Button_P.gif +0 -0
  174. data/doc/ex/images/Button_Q.gif +0 -0
  175. data/doc/ex/images/Button_R.gif +0 -0
  176. data/doc/ex/images/Button_S.gif +0 -0
  177. data/doc/ex/images/Button_T.gif +0 -0
  178. data/doc/ex/images/Button_U.gif +0 -0
  179. data/doc/ex/images/Button_V.gif +0 -0
  180. data/doc/ex/images/Button_W.gif +0 -0
  181. data/doc/ex/images/Button_X.gif +0 -0
  182. data/doc/ex/images/Button_Y.gif +0 -0
  183. data/doc/ex/images/Button_Z.gif +0 -0
  184. data/doc/ex/images/Cheetah.jpg +0 -0
  185. data/doc/ex/images/Coffee.png +0 -0
  186. data/doc/ex/images/Flower_Hat.jpg +0 -0
  187. data/doc/ex/images/Gold_Statue.jpg +0 -0
  188. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  189. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  190. data/doc/ex/images/Leaf.miff +0 -0
  191. data/doc/ex/images/No.png +0 -0
  192. data/doc/ex/images/Polynesia.jpg +0 -0
  193. data/doc/ex/images/Red_Rocks.jpg +0 -0
  194. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  195. data/doc/ex/images/Shorts.jpg +0 -0
  196. data/doc/ex/images/Snake.png +0 -0
  197. data/doc/ex/images/Violin.jpg +0 -0
  198. data/doc/ex/images/Yellow_Rose.miff +0 -0
  199. data/doc/ex/images/big-duck.gif +0 -0
  200. data/doc/ex/images/duck.gif +0 -0
  201. data/doc/ex/images/duck0.gif +0 -0
  202. data/doc/ex/images/duck1.gif +0 -0
  203. data/doc/ex/images/duck10.gif +0 -0
  204. data/doc/ex/images/duck11.gif +0 -0
  205. data/doc/ex/images/duck12.gif +0 -0
  206. data/doc/ex/images/duck13.gif +0 -0
  207. data/doc/ex/images/duck14.gif +0 -0
  208. data/doc/ex/images/duck15.gif +0 -0
  209. data/doc/ex/images/duck2.gif +0 -0
  210. data/doc/ex/images/duck3.gif +0 -0
  211. data/doc/ex/images/duck4.gif +0 -0
  212. data/doc/ex/images/duck5.gif +0 -0
  213. data/doc/ex/images/duck6.gif +0 -0
  214. data/doc/ex/images/duck7.gif +0 -0
  215. data/doc/ex/images/duck8.gif +0 -0
  216. data/doc/ex/images/duck9.gif +0 -0
  217. data/doc/ex/images/graydient230x6.gif +0 -0
  218. data/doc/ex/images/image_with_profile.jpg +0 -0
  219. data/doc/ex/images/logo400x83.gif +0 -0
  220. data/doc/ex/images/model.miff +0 -0
  221. data/doc/ex/images/notimplemented.gif +0 -0
  222. data/doc/ex/images/smile.miff +0 -0
  223. data/doc/ex/images/spin.gif +0 -0
  224. data/doc/ex/implode.rb +0 -34
  225. data/doc/ex/level.rb +0 -11
  226. data/doc/ex/level_colors.rb +0 -11
  227. data/doc/ex/line.rb +0 -41
  228. data/doc/ex/line01.rb +0 -21
  229. data/doc/ex/mask.rb +0 -35
  230. data/doc/ex/matte_fill_to_border.rb +0 -39
  231. data/doc/ex/matte_floodfill.rb +0 -32
  232. data/doc/ex/matte_replace.rb +0 -39
  233. data/doc/ex/median_filter.rb +0 -28
  234. data/doc/ex/modulate.rb +0 -11
  235. data/doc/ex/mono.rb +0 -23
  236. data/doc/ex/morph.rb +0 -25
  237. data/doc/ex/mosaic.rb +0 -37
  238. data/doc/ex/motion_blur.rb +0 -11
  239. data/doc/ex/negate.rb +0 -11
  240. data/doc/ex/negate_channel.rb +0 -9
  241. data/doc/ex/nested_rvg.rb +0 -21
  242. data/doc/ex/nonzero.rb +0 -42
  243. data/doc/ex/normalize.rb +0 -11
  244. data/doc/ex/oil_paint.rb +0 -11
  245. data/doc/ex/opacity.rb +0 -37
  246. data/doc/ex/ordered_dither.rb +0 -11
  247. data/doc/ex/path.rb +0 -63
  248. data/doc/ex/pattern1.rb +0 -25
  249. data/doc/ex/pattern2.rb +0 -26
  250. data/doc/ex/polaroid.rb +0 -26
  251. data/doc/ex/polygon.rb +0 -23
  252. data/doc/ex/polygon01.rb +0 -21
  253. data/doc/ex/polyline.rb +0 -22
  254. data/doc/ex/polyline01.rb +0 -21
  255. data/doc/ex/posterize.rb +0 -8
  256. data/doc/ex/preview.rb +0 -8
  257. data/doc/ex/qbezierpath.rb +0 -52
  258. data/doc/ex/quad01.rb +0 -34
  259. data/doc/ex/quantize-m.rb +0 -25
  260. data/doc/ex/radial_blur.rb +0 -9
  261. data/doc/ex/raise.rb +0 -8
  262. data/doc/ex/random_threshold_channel.rb +0 -13
  263. data/doc/ex/rect01.rb +0 -14
  264. data/doc/ex/rect02.rb +0 -20
  265. data/doc/ex/rectangle.rb +0 -34
  266. data/doc/ex/reduce_noise.rb +0 -28
  267. data/doc/ex/remap.rb +0 -11
  268. data/doc/ex/remap_images.rb +0 -19
  269. data/doc/ex/resize_to_fill.rb +0 -8
  270. data/doc/ex/resize_to_fit.rb +0 -8
  271. data/doc/ex/roll.rb +0 -9
  272. data/doc/ex/rotate.rb +0 -44
  273. data/doc/ex/rotate_f.rb +0 -14
  274. data/doc/ex/roundrect.rb +0 -33
  275. data/doc/ex/rubyname.rb +0 -30
  276. data/doc/ex/rvg_clippath.rb +0 -12
  277. data/doc/ex/rvg_linecap.rb +0 -42
  278. data/doc/ex/rvg_linejoin.rb +0 -40
  279. data/doc/ex/rvg_opacity.rb +0 -18
  280. data/doc/ex/rvg_pattern.rb +0 -26
  281. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  282. data/doc/ex/segment.rb +0 -11
  283. data/doc/ex/sepiatone.rb +0 -7
  284. data/doc/ex/shade.rb +0 -11
  285. data/doc/ex/shadow.rb +0 -30
  286. data/doc/ex/shave.rb +0 -15
  287. data/doc/ex/shear.rb +0 -10
  288. data/doc/ex/sketch.rb +0 -17
  289. data/doc/ex/skewx.rb +0 -51
  290. data/doc/ex/skewy.rb +0 -47
  291. data/doc/ex/smile.rb +0 -126
  292. data/doc/ex/solarize.rb +0 -11
  293. data/doc/ex/sparse_color.rb +0 -55
  294. data/doc/ex/splice.rb +0 -8
  295. data/doc/ex/spread.rb +0 -11
  296. data/doc/ex/stegano.rb +0 -54
  297. data/doc/ex/stroke_dasharray.rb +0 -42
  298. data/doc/ex/stroke_fill.rb +0 -10
  299. data/doc/ex/stroke_linecap.rb +0 -44
  300. data/doc/ex/stroke_linejoin.rb +0 -48
  301. data/doc/ex/stroke_width.rb +0 -49
  302. data/doc/ex/swirl.rb +0 -17
  303. data/doc/ex/text.rb +0 -37
  304. data/doc/ex/text01.rb +0 -16
  305. data/doc/ex/text_align.rb +0 -36
  306. data/doc/ex/text_antialias.rb +0 -37
  307. data/doc/ex/text_styles.rb +0 -19
  308. data/doc/ex/text_undercolor.rb +0 -28
  309. data/doc/ex/texture_fill_to_border.rb +0 -34
  310. data/doc/ex/texture_floodfill.rb +0 -32
  311. data/doc/ex/texturefill.rb +0 -24
  312. data/doc/ex/threshold.rb +0 -13
  313. data/doc/ex/to_blob.rb +0 -13
  314. data/doc/ex/translate.rb +0 -39
  315. data/doc/ex/transparent.rb +0 -38
  316. data/doc/ex/transpose.rb +0 -9
  317. data/doc/ex/transverse.rb +0 -9
  318. data/doc/ex/tref01.rb +0 -24
  319. data/doc/ex/triangle01.rb +0 -15
  320. data/doc/ex/trim.rb +0 -23
  321. data/doc/ex/tspan01.rb +0 -17
  322. data/doc/ex/tspan02.rb +0 -17
  323. data/doc/ex/tspan03.rb +0 -19
  324. data/doc/ex/unsharp_mask.rb +0 -28
  325. data/doc/ex/viewex.rb +0 -33
  326. data/doc/ex/vignette.rb +0 -12
  327. data/doc/ex/watermark.rb +0 -27
  328. data/doc/ex/wave.rb +0 -9
  329. data/doc/ex/wet_floor.rb +0 -58
  330. data/doc/ex/writing_mode01.rb +0 -26
  331. data/doc/ex/writing_mode02.rb +0 -26
  332. data/doc/ilist.html +0 -2056
  333. data/doc/image1.html +0 -4680
  334. data/doc/image2.html +0 -3665
  335. data/doc/image3.html +0 -4522
  336. data/doc/imageattrs.html +0 -1638
  337. data/doc/imusage.html +0 -514
  338. data/doc/index.html +0 -416
  339. data/doc/info.html +0 -1499
  340. data/doc/magick.html +0 -570
  341. data/doc/optequiv.html +0 -2435
  342. data/doc/rvg.html +0 -975
  343. data/doc/rvgclip.html +0 -248
  344. data/doc/rvggroup.html +0 -305
  345. data/doc/rvgimage.html +0 -289
  346. data/doc/rvgpattern.html +0 -475
  347. data/doc/rvgshape.html +0 -406
  348. data/doc/rvgstyle.html +0 -270
  349. data/doc/rvgtext.html +0 -465
  350. data/doc/rvgtspan.html +0 -238
  351. data/doc/rvgtut.html +0 -530
  352. data/doc/rvguse.html +0 -145
  353. data/doc/rvgxform.html +0 -294
  354. data/doc/scripts/doc.js +0 -22
  355. data/doc/scripts/stripeTables.js +0 -23
  356. data/doc/struct.html +0 -1339
  357. data/doc/usage.html +0 -1621
  358. data/examples/constitute.rb +0 -7
  359. data/examples/crop_with_gravity.rb +0 -43
  360. data/examples/demo.rb +0 -323
  361. data/examples/describe.rb +0 -41
  362. data/examples/find_similar_region.rb +0 -34
  363. data/examples/histogram.rb +0 -312
  364. data/examples/identify.rb +0 -174
  365. data/examples/image_opacity.rb +0 -28
  366. data/examples/import_export.rb +0 -31
  367. data/examples/pattern_fill.rb +0 -37
  368. data/examples/rotating_text.rb +0 -45
  369. data/examples/spinner.rb +0 -49
  370. data/examples/thumbnail.rb +0 -64
  371. data/examples/vignette.rb +0 -78
  372. data/spec/rmagick/ImageList1_spec.rb +0 -24
  373. data/spec/rmagick/draw_spec.rb +0 -155
  374. data/spec/rmagick/image/blue_shift_spec.rb +0 -14
  375. data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
  376. data/spec/rmagick/image/composite_spec.rb +0 -72
  377. data/spec/rmagick/image/constitute_spec.rb +0 -13
  378. data/spec/rmagick/image/dispatch_spec.rb +0 -16
  379. data/spec/rmagick/image/dissolve_spec.rb +0 -54
  380. data/spec/rmagick/image/from_blob_spec.rb +0 -12
  381. data/spec/rmagick/image/ping_spec.rb +0 -12
  382. data/spec/rmagick/image/properties_spec.rb +0 -27
  383. data/spec/rmagick/image/read_spec.rb +0 -28
  384. data/spec/spec_helper.rb +0 -9
  385. data/spec/support/issue_200/app.rb +0 -8
  386. data/test/Draw.rb +0 -351
  387. data/test/Enum.rb +0 -228
  388. data/test/Fill.rb +0 -93
  389. data/test/Image1.rb +0 -606
  390. data/test/Image2.rb +0 -1408
  391. data/test/Image3.rb +0 -1086
  392. data/test/ImageList1.rb +0 -858
  393. data/test/ImageList2.rb +0 -375
  394. data/test/Image_attributes.rb +0 -635
  395. data/test/Import_Export.rb +0 -111
  396. data/test/Info.rb +0 -436
  397. data/test/KernelInfo.rb +0 -59
  398. data/test/Magick.rb +0 -311
  399. data/test/Pixel.rb +0 -259
  400. data/test/PolaroidOptions.rb +0 -23
  401. data/test/Preview.rb +0 -26
  402. data/test/Struct.rb +0 -45
  403. data/test/appearance/Montage.rb +0 -26
  404. data/test/appearance/appearance_assertion.rb +0 -13
  405. data/test/appearance/expected/montage_border_color.jpg +0 -0
  406. data/test/cmyk.icm +0 -0
  407. data/test/lib/internal/Draw.rb +0 -811
  408. data/test/lib/internal/Geometry.rb +0 -98
  409. data/test/lib/internal/Magick.rb +0 -40
  410. data/test/srgb.icm +0 -0
  411. data/test/test_all_basic.rb +0 -49
  412. data/test/tmpnam_test.rb +0 -50
@@ -1,41 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require 'rmagick'
3
-
4
- imgl = Magick::ImageList.new
5
- imgl.new_image(470, 150, Magick::HatchFill.new('white', 'lightcyan2'))
6
- gc = Magick::Draw.new
7
-
8
- # Draw Bezier curve
9
- gc.stroke('red')
10
- gc.stroke_width(3)
11
- gc.fill_opacity(0)
12
- gc.bezier(25, 125, 100, 25, 400, 25, 325, 125)
13
-
14
- # Draw circles around end points
15
- gc.fill_opacity(0)
16
- gc.stroke('gray50').stroke_width(1)
17
- gc.circle(25, 125, 28, 128)
18
- gc.circle(325, 125, 328, 123)
19
-
20
- # Draw filled circles around control points
21
- gc.line(25, 125, 100, 25)
22
- gc.line(325, 125, 400, 25)
23
- gc.fill_opacity(1)
24
- gc.fill('gray50')
25
- gc.circle(100, 25, 103, 28)
26
- gc.circle(400, 25, 403, 28)
27
-
28
- # Annotate
29
- gc.font_weight(Magick::NormalWeight)
30
- gc.font_style(Magick::NormalStyle)
31
- gc.fill('black')
32
- gc.stroke('transparent')
33
- gc.text(34, 125, "'25,125'")
34
- gc.text(107, 25, "'100,25'")
35
- gc.text(335, 125, "'325,125'")
36
- gc.text(405, 25, "'400,25'")
37
-
38
- gc.draw(imgl)
39
- imgl.border!(1, 1, 'lightcyan2')
40
- imgl.write('cbezier2.gif')
41
- exit(0)
@@ -1,41 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require 'rmagick'
3
-
4
- imgl = Magick::ImageList.new
5
- imgl.new_image(540, 200, Magick::HatchFill.new('white', 'lightcyan2'))
6
- gc = Magick::Draw.new
7
-
8
- # Draw Bezier curve
9
- gc.stroke('red')
10
- gc.stroke_width(3)
11
- gc.fill_opacity(0)
12
- gc.bezier(100, 150, 25, 50, 475, 50, 400, 150)
13
-
14
- # Draw circles around endpoints
15
- gc.fill_opacity(0)
16
- gc.stroke('gray50').stroke_width(1)
17
- gc.circle(100, 150, 103, 153)
18
- gc.circle(400, 150, 403, 153)
19
- gc.line(100, 150, 25, 50)
20
- gc.line(400, 150, 475, 50)
21
-
22
- # Draw filled circles around control points
23
- gc.fill_opacity(1)
24
- gc.fill('gray50')
25
- gc.circle(25, 50, 28, 53)
26
- gc.circle(475, 50, 478, 53)
27
-
28
- # Annotate
29
- gc.font_weight(Magick::NormalWeight)
30
- gc.font_style(Magick::NormalStyle)
31
- gc.fill('black')
32
- gc.stroke('transparent')
33
- gc.text(107, 150, "'100,150'")
34
- gc.text(30, 50, "'25,50'")
35
- gc.text(409, 150, "'400,150'")
36
- gc.text(480, 50, "'475,50'")
37
-
38
- gc.draw(imgl)
39
- imgl.border!(1, 1, 'lightcyan2')
40
- imgl.write('cbezier3.gif')
41
- exit(0)
@@ -1,42 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require 'rmagick'
3
-
4
- imgl = Magick::ImageList.new
5
- imgl.new_image(390, 360, Magick::HatchFill.new('white', 'lightcyan2'))
6
- gc = Magick::Draw.new
7
-
8
- # Draw Bezier curve
9
- gc.stroke('red')
10
- gc.stroke_width(3)
11
- gc.fill_opacity(0)
12
- gc.bezier(20, 180, 20, 30, 320, 330, 320, 180)
13
-
14
- # Draw circles around endpoints
15
- gc.fill_opacity(0)
16
- gc.stroke('gray50').stroke_width(1)
17
- gc.circle(20, 180, 23, 183)
18
- gc.circle(320, 180, 323, 183)
19
-
20
- # Draw filled circles around control points
21
- gc.line(20, 180, 20, 30)
22
- gc.line(320, 180, 320, 330)
23
- gc.fill_opacity(1)
24
- gc.fill('gray50')
25
- gc.circle(20, 30, 23, 33)
26
- gc.circle(320, 330, 323, 333)
27
-
28
- # Annotate
29
- gc.font_weight(Magick::NormalWeight)
30
- gc.font_style(Magick::NormalStyle)
31
- gc.fill('black')
32
- gc.stroke('transparent')
33
- gc.text(29, 180, "'20,180'")
34
- gc.text(29, 33, "'20,30'")
35
- gc.text(329, 330, "'320,330'")
36
- gc.text(329, 180, "'320,180'")
37
-
38
- gc.draw(imgl)
39
- imgl.border!(1, 1, 'lightcyan2')
40
-
41
- imgl.write('cbezier4.gif')
42
- exit(0)
@@ -1,42 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require 'rmagick'
3
-
4
- imgl = Magick::ImageList.new
5
- imgl.new_image(390, 150, Magick::HatchFill.new('white', 'lightcyan2'))
6
- gc = Magick::Draw.new
7
-
8
- # Draw Bezier curve
9
- gc.stroke('red')
10
- gc.stroke_width(3)
11
- gc.fill_opacity(0)
12
- gc.bezier(20, 120, 95, 20, 245, 20, 320, 120)
13
-
14
- # Draw circles around endpoints
15
- gc.fill_opacity(0)
16
- gc.stroke('gray50').stroke_width(1)
17
- gc.circle(20, 120, 23, 123)
18
- gc.circle(320, 120, 323, 123)
19
-
20
- # Draw filled circles around control points
21
- gc.line(20, 120, 95, 20)
22
- gc.line(320, 120, 245, 20)
23
- gc.fill_opacity(1)
24
- gc.fill('gray50')
25
- gc.circle(95, 20, 98, 23)
26
- gc.circle(245, 20, 248, 23)
27
-
28
- # Annotate
29
- gc.font_weight(Magick::NormalWeight)
30
- gc.font_style(Magick::NormalStyle)
31
- gc.fill('black')
32
- gc.stroke('transparent')
33
- gc.text(29, 120, "'20,120'")
34
- gc.text(104, 20, "'95,20'")
35
- gc.text(254, 20, "'245,20'")
36
- gc.text(329, 120, "'320,120'")
37
-
38
- gc.draw(imgl)
39
- imgl.border!(1, 1, 'lightcyan2')
40
-
41
- imgl.write('cbezier5.gif')
42
- exit(0)
@@ -1,53 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
-
3
- require 'rmagick'
4
-
5
- imgl = Magick::ImageList.new
6
- imgl.new_image(400, 300, Magick::HatchFill.new('white', 'lightcyan2'))
7
-
8
- gc = Magick::Draw.new
9
-
10
- # Draw Bezier curve
11
- gc.stroke('red')
12
- gc.stroke_width(2)
13
- gc.fill_opacity(0)
14
- gc.bezier(50, 150, 50, 50, 200, 50, 200, 150, 200, 250, 350, 250, 350, 150)
15
-
16
- # Draw filled circles for the control points
17
- gc.fill('gray50')
18
- gc.stroke('gray50')
19
- gc.fill_opacity(1)
20
- gc.circle(50, 50, 53, 53)
21
- gc.circle(200, 50, 203, 53)
22
- gc.circle(200, 250, 203, 253)
23
- gc.circle(350, 250, 353, 253)
24
-
25
- # Draw circles on the points the curve passes through
26
- gc.fill_opacity(0)
27
- gc.circle(50, 150, 53, 153)
28
- gc.circle(200, 150, 203, 153)
29
- gc.circle(350, 150, 353, 153)
30
-
31
- # Draw the gray lines between points and control points
32
- gc.line(50, 50, 50, 150)
33
- gc.line(200, 50, 200, 250)
34
- gc.line(350, 150, 350, 250)
35
-
36
- # Annotate
37
- gc.font_weight(Magick::NormalWeight)
38
- gc.font_style(Magick::NormalStyle)
39
- gc.fill('black')
40
- gc.stroke('transparent')
41
- gc.text(30, 170, "'50,150'")
42
- gc.text(30, 40, "'50,50'")
43
- gc.text(180, 40, "'200,50'")
44
- gc.text(210, 155, "'200,150'")
45
- gc.text(180, 270, "'200,250'")
46
- gc.text(330, 270, "'350,250'")
47
- gc.text(330, 140, "'350,150'")
48
- gc.draw(imgl)
49
-
50
- imgl.border!(1, 1, 'lightcyan2')
51
-
52
- imgl.write('cbezier6.gif')
53
- exit
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
-
3
- require 'rmagick'
4
-
5
- img = Magick::Image.read('images/Flower_Hat.jpg').first
6
- imgs = Magick::ImageList.new
7
-
8
- imgs << img
9
- imgs << img.channel(Magick::RedChannel)
10
- imgs.cur_image['Label'] = 'RedChannel'
11
- imgs << img.channel(Magick::GreenChannel)
12
- imgs.cur_image['Label'] = 'GreenChannel'
13
- imgs << img.channel(Magick::BlueChannel)
14
- imgs.cur_image['Label'] = 'BlueChannel'
15
-
16
- result = imgs.montage do
17
- self.tile = '2x2'
18
- self.background_color = 'black'
19
- self.stroke = 'transparent'
20
- self.fill = 'white'
21
- self.pointsize = 9
22
- self.geometry = Magick::Geometry.new(img.columns / 2, img.rows / 2, 5, 5)
23
- end
24
-
25
- result.write('channel.jpg')
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require 'rmagick'
3
-
4
- # Demonstrate the Image#charcoal method
5
-
6
- img = Magick::Image.read('images/Flower_Hat.jpg').first
7
-
8
- img = img.charcoal(0.75)
9
-
10
- img.write('charcoal.jpg')
11
-
12
- exit
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require 'rmagick'
3
-
4
- # Demonstrate the Image#chop method
5
-
6
- img = Magick::Image.read('images/Flower_Hat.jpg')[0]
7
-
8
- # Chop the specified rectangle out of the img.
9
- chopped = img.chop(0, img.rows / 2, img.columns / 2, img.rows)
10
-
11
- # Make a "before" image by highlighting the chopped area.
12
- gc = Magick::Draw.new
13
- gc.fill('white')
14
- gc.stroke('transparent')
15
- gc.fill_opacity(0.25)
16
- gc.rectangle(0, img.rows / 2, img.columns / 2, img.rows)
17
- gc.draw(img)
18
-
19
- img.write('chop_before.jpg')
20
-
21
- # Create a image to use as a background for
22
- # the after image. Make the chopped image the
23
- # same size as before the chop.
24
- bg = Magick::Image.new(img.columns, img.rows)
25
-
26
- chopped = bg.composite(chopped, Magick::NorthEastGravity, Magick::OverCompositeOp)
27
-
28
- chopped.write('chop_after.jpg')
29
- exit
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
- require 'rmagick'
3
-
4
- imgl = Magick::ImageList.new
5
- imgl.new_image(250, 250, Magick::HatchFill.new('white', 'LightCyan2'))
6
-
7
- gc = Magick::Draw.new
8
-
9
- # Draw the circle
10
- gc.fill_opacity(0)
11
- gc.stroke('red').stroke_width(3)
12
- gc.circle(125, 125, 25, 125)
13
-
14
- # Draw a little gray circle on the perimeter
15
- gc.stroke_width(1)
16
- gc.stroke('gray50')
17
- gc.circle(25, 125, 28, 128)
18
-
19
- # Draw a dot at the center
20
- gc.fill_opacity(1)
21
- gc.circle(125, 125, 128, 128)
22
-
23
- # Annotate the dots
24
- gc.font_weight(Magick::NormalWeight)
25
- gc.font_style(Magick::NormalStyle)
26
- gc.fill('black')
27
- gc.stroke('transparent')
28
- gc.text(132, 125, "'125,125'")
29
- gc.text(32, 125, "'25,125'")
30
- gc.draw(imgl)
31
-
32
- imgl.border!(1, 1, 'lightcyan2')
33
- imgl.write('circle.gif')
@@ -1,16 +0,0 @@
1
- require 'rvg/rvg'
2
-
3
- Magick::RVG.dpi = 90
4
-
5
- rvg = Magick::RVG.new(12.cm, 4.cm) do |canvas|
6
- canvas.viewbox(0, 0, 1200, 400)
7
- canvas.background_fill = 'white'
8
- canvas.desc = 'Example circle01 - circle filled with red and stroked with blue'
9
-
10
- # Show outline of canvas using the 'rect' method
11
- canvas.rect(1195, 395, 1, 1).styles(fill: 'none', stroke: 'blue', stroke_width: 2)
12
-
13
- canvas.circle(100, 600, 200).styles(fill: 'red', stroke: 'blue', stroke_width: 10)
14
- end
15
-
16
- rvg.draw.write('circle01.gif')
@@ -1,60 +0,0 @@
1
- #!/usr/bin/env 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') do
14
- pr.polygon(*points)
15
- end
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
@@ -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