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,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
@@ -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
@@ -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'
@@ -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'
@@ -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