rmagick 2.16.0 → 5.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 (405) hide show
  1. checksums.yaml +5 -5
  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 +5 -1
  12. data/.rspec +1 -0
  13. data/.rubocop.yml +37 -340
  14. data/.rubocop_todo.yml +448 -0
  15. data/.yardopts +5 -0
  16. data/CHANGELOG.md +435 -0
  17. data/CODE_OF_CONDUCT.md +122 -7
  18. data/CONTRIBUTING.md +37 -6
  19. data/Gemfile +0 -6
  20. data/README.md +317 -0
  21. data/Rakefile +37 -35
  22. data/before_install_linux.sh +65 -28
  23. data/before_install_osx.sh +58 -2
  24. data/ext/RMagick/extconf.rb +286 -393
  25. data/ext/RMagick/rmagick.c +106 -111
  26. data/ext/RMagick/rmagick.h +235 -331
  27. data/ext/RMagick/rmagick_gvl.h +224 -0
  28. data/ext/RMagick/rmdraw.c +484 -842
  29. data/ext/RMagick/rmenum.c +316 -755
  30. data/ext/RMagick/rmfill.c +281 -191
  31. data/ext/RMagick/rmilist.c +450 -455
  32. data/ext/RMagick/rmimage.c +6247 -5289
  33. data/ext/RMagick/rminfo.c +721 -894
  34. data/ext/RMagick/rmkinfo.c +228 -0
  35. data/ext/RMagick/rmmain.c +727 -519
  36. data/ext/RMagick/rmmontage.c +127 -172
  37. data/ext/RMagick/rmpixel.c +638 -431
  38. data/ext/RMagick/rmstruct.c +102 -282
  39. data/ext/RMagick/rmutil.c +450 -363
  40. data/lib/rmagick/version.rb +5 -4
  41. data/lib/rmagick.rb +2 -0
  42. data/lib/rmagick_internal.rb +349 -413
  43. data/lib/rvg/clippath.rb +3 -4
  44. data/lib/rvg/container.rb +30 -22
  45. data/lib/rvg/deep_equal.rb +11 -11
  46. data/lib/rvg/describable.rb +2 -2
  47. data/lib/rvg/embellishable.rb +63 -68
  48. data/lib/rvg/misc.rb +136 -139
  49. data/lib/rvg/paint.rb +2 -1
  50. data/lib/rvg/pathdata.rb +7 -8
  51. data/lib/rvg/rvg.rb +47 -46
  52. data/lib/rvg/stretchable.rb +22 -28
  53. data/lib/rvg/stylable.rb +12 -10
  54. data/lib/rvg/text.rb +169 -165
  55. data/lib/rvg/transformable.rb +17 -16
  56. data/lib/rvg/units.rb +5 -5
  57. data/rmagick.gemspec +16 -39
  58. metadata +118 -395
  59. data/.hound.yml +0 -2
  60. data/.simplecov +0 -27
  61. data/.travis.yml +0 -74
  62. data/Doxyfile +0 -1514
  63. data/README.textile +0 -251
  64. data/deprecated/RMagick.rb +0 -6
  65. data/doc/.cvsignore +0 -1
  66. data/doc/comtasks.html +0 -287
  67. data/doc/constants.html +0 -1581
  68. data/doc/css/doc.css +0 -299
  69. data/doc/css/popup.css +0 -34
  70. data/doc/css/ref.css +0 -67
  71. data/doc/draw.html +0 -3272
  72. data/doc/ex/InitialCoords.rb +0 -22
  73. data/doc/ex/NewCoordSys.rb +0 -30
  74. data/doc/ex/OrigCoordSys.rb +0 -16
  75. data/doc/ex/PreserveAspectRatio.rb +0 -204
  76. data/doc/ex/RotateScale.rb +0 -36
  77. data/doc/ex/Skew.rb +0 -38
  78. data/doc/ex/Use01.rb +0 -15
  79. data/doc/ex/Use02.rb +0 -20
  80. data/doc/ex/Use03.rb +0 -16
  81. data/doc/ex/ViewBox.rb +0 -31
  82. data/doc/ex/adaptive_threshold.rb +0 -9
  83. data/doc/ex/add_noise.rb +0 -16
  84. data/doc/ex/affine.rb +0 -48
  85. data/doc/ex/affine_transform.rb +0 -20
  86. data/doc/ex/arc.rb +0 -49
  87. data/doc/ex/arcpath.rb +0 -32
  88. data/doc/ex/arcs01.rb +0 -28
  89. data/doc/ex/arcs02.rb +0 -59
  90. data/doc/ex/average.rb +0 -15
  91. data/doc/ex/axes.rb +0 -64
  92. data/doc/ex/baseline_shift01.rb +0 -17
  93. data/doc/ex/bilevel_channel.rb +0 -8
  94. data/doc/ex/blur_image.rb +0 -12
  95. data/doc/ex/border.rb +0 -10
  96. data/doc/ex/bounding_box.rb +0 -42
  97. data/doc/ex/cbezier1.rb +0 -41
  98. data/doc/ex/cbezier2.rb +0 -41
  99. data/doc/ex/cbezier3.rb +0 -41
  100. data/doc/ex/cbezier4.rb +0 -42
  101. data/doc/ex/cbezier5.rb +0 -42
  102. data/doc/ex/cbezier6.rb +0 -53
  103. data/doc/ex/channel.rb +0 -25
  104. data/doc/ex/charcoal.rb +0 -12
  105. data/doc/ex/chop.rb +0 -29
  106. data/doc/ex/circle.rb +0 -33
  107. data/doc/ex/circle01.rb +0 -16
  108. data/doc/ex/clip_path.rb +0 -60
  109. data/doc/ex/coalesce.rb +0 -57
  110. data/doc/ex/color_fill_to_border.rb +0 -29
  111. data/doc/ex/color_floodfill.rb +0 -28
  112. data/doc/ex/color_histogram.rb +0 -47
  113. data/doc/ex/color_reset.rb +0 -11
  114. data/doc/ex/colorize.rb +0 -16
  115. data/doc/ex/colors.rb +0 -64
  116. data/doc/ex/compose_mask.rb +0 -22
  117. data/doc/ex/composite.rb +0 -133
  118. data/doc/ex/composite_layers.rb +0 -53
  119. data/doc/ex/composite_tiled.rb +0 -21
  120. data/doc/ex/contrast.rb +0 -36
  121. data/doc/ex/crop.rb +0 -31
  122. data/doc/ex/crop_with_gravity.rb +0 -42
  123. data/doc/ex/cubic01.rb +0 -43
  124. data/doc/ex/cubic02.rb +0 -91
  125. data/doc/ex/cycle_colormap.rb +0 -21
  126. data/doc/ex/dissolve.rb +0 -12
  127. data/doc/ex/drawcomp.rb +0 -42
  128. data/doc/ex/drop_shadow.rb +0 -60
  129. data/doc/ex/edge.rb +0 -11
  130. data/doc/ex/ellipse.rb +0 -45
  131. data/doc/ex/ellipse01.rb +0 -21
  132. data/doc/ex/emboss.rb +0 -11
  133. data/doc/ex/enhance.rb +0 -28
  134. data/doc/ex/equalize.rb +0 -11
  135. data/doc/ex/evenodd.rb +0 -42
  136. data/doc/ex/fill_pattern.rb +0 -23
  137. data/doc/ex/flatten_images.rb +0 -36
  138. data/doc/ex/flip.rb +0 -11
  139. data/doc/ex/flop.rb +0 -11
  140. data/doc/ex/font_styles.rb +0 -32
  141. data/doc/ex/fonts.rb +0 -20
  142. data/doc/ex/frame.rb +0 -12
  143. data/doc/ex/gaussian_blur.rb +0 -11
  144. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  145. data/doc/ex/get_pixels.rb +0 -47
  146. data/doc/ex/get_type_metrics.rb +0 -141
  147. data/doc/ex/gradientfill.rb +0 -27
  148. data/doc/ex/grav.rb +0 -45
  149. data/doc/ex/gravity.rb +0 -80
  150. data/doc/ex/group.rb +0 -26
  151. data/doc/ex/hatchfill.rb +0 -27
  152. data/doc/ex/image.rb +0 -44
  153. data/doc/ex/images/Apple.miff +0 -0
  154. data/doc/ex/images/Ballerina.jpg +0 -0
  155. data/doc/ex/images/Ballerina3.jpg +0 -0
  156. data/doc/ex/images/Button_0.gif +0 -0
  157. data/doc/ex/images/Button_1.gif +0 -0
  158. data/doc/ex/images/Button_2.gif +0 -0
  159. data/doc/ex/images/Button_3.gif +0 -0
  160. data/doc/ex/images/Button_4.gif +0 -0
  161. data/doc/ex/images/Button_5.gif +0 -0
  162. data/doc/ex/images/Button_6.gif +0 -0
  163. data/doc/ex/images/Button_7.gif +0 -0
  164. data/doc/ex/images/Button_8.gif +0 -0
  165. data/doc/ex/images/Button_9.gif +0 -0
  166. data/doc/ex/images/Button_A.gif +0 -0
  167. data/doc/ex/images/Button_B.gif +0 -0
  168. data/doc/ex/images/Button_C.gif +0 -0
  169. data/doc/ex/images/Button_D.gif +0 -0
  170. data/doc/ex/images/Button_E.gif +0 -0
  171. data/doc/ex/images/Button_F.gif +0 -0
  172. data/doc/ex/images/Button_G.gif +0 -0
  173. data/doc/ex/images/Button_H.gif +0 -0
  174. data/doc/ex/images/Button_I.gif +0 -0
  175. data/doc/ex/images/Button_J.gif +0 -0
  176. data/doc/ex/images/Button_K.gif +0 -0
  177. data/doc/ex/images/Button_L.gif +0 -0
  178. data/doc/ex/images/Button_M.gif +0 -0
  179. data/doc/ex/images/Button_N.gif +0 -0
  180. data/doc/ex/images/Button_O.gif +0 -0
  181. data/doc/ex/images/Button_P.gif +0 -0
  182. data/doc/ex/images/Button_Q.gif +0 -0
  183. data/doc/ex/images/Button_R.gif +0 -0
  184. data/doc/ex/images/Button_S.gif +0 -0
  185. data/doc/ex/images/Button_T.gif +0 -0
  186. data/doc/ex/images/Button_U.gif +0 -0
  187. data/doc/ex/images/Button_V.gif +0 -0
  188. data/doc/ex/images/Button_W.gif +0 -0
  189. data/doc/ex/images/Button_X.gif +0 -0
  190. data/doc/ex/images/Button_Y.gif +0 -0
  191. data/doc/ex/images/Button_Z.gif +0 -0
  192. data/doc/ex/images/Cheetah.jpg +0 -0
  193. data/doc/ex/images/Coffee.wmf +0 -0
  194. data/doc/ex/images/Flower_Hat.jpg +0 -0
  195. data/doc/ex/images/Gold_Statue.jpg +0 -0
  196. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  197. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  198. data/doc/ex/images/Leaf.miff +0 -0
  199. data/doc/ex/images/No.wmf +0 -0
  200. data/doc/ex/images/Polynesia.jpg +0 -0
  201. data/doc/ex/images/Red_Rocks.jpg +0 -0
  202. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  203. data/doc/ex/images/Shorts.jpg +0 -0
  204. data/doc/ex/images/Snake.wmf +0 -0
  205. data/doc/ex/images/Violin.jpg +0 -0
  206. data/doc/ex/images/Yellow_Rose.miff +0 -0
  207. data/doc/ex/images/big-duck.gif +0 -0
  208. data/doc/ex/images/duck.gif +0 -0
  209. data/doc/ex/images/duck0.gif +0 -0
  210. data/doc/ex/images/duck1.gif +0 -0
  211. data/doc/ex/images/duck10.gif +0 -0
  212. data/doc/ex/images/duck11.gif +0 -0
  213. data/doc/ex/images/duck12.gif +0 -0
  214. data/doc/ex/images/duck13.gif +0 -0
  215. data/doc/ex/images/duck14.gif +0 -0
  216. data/doc/ex/images/duck15.gif +0 -0
  217. data/doc/ex/images/duck2.gif +0 -0
  218. data/doc/ex/images/duck3.gif +0 -0
  219. data/doc/ex/images/duck4.gif +0 -0
  220. data/doc/ex/images/duck5.gif +0 -0
  221. data/doc/ex/images/duck6.gif +0 -0
  222. data/doc/ex/images/duck7.gif +0 -0
  223. data/doc/ex/images/duck8.gif +0 -0
  224. data/doc/ex/images/duck9.gif +0 -0
  225. data/doc/ex/images/graydient230x6.gif +0 -0
  226. data/doc/ex/images/image_with_profile.jpg +0 -0
  227. data/doc/ex/images/logo400x83.gif +0 -0
  228. data/doc/ex/images/model.miff +0 -0
  229. data/doc/ex/images/notimplemented.gif +0 -0
  230. data/doc/ex/images/smile.miff +0 -0
  231. data/doc/ex/images/spin.gif +0 -0
  232. data/doc/ex/implode.rb +0 -34
  233. data/doc/ex/level.rb +0 -11
  234. data/doc/ex/level_colors.rb +0 -11
  235. data/doc/ex/line.rb +0 -41
  236. data/doc/ex/line01.rb +0 -21
  237. data/doc/ex/mask.rb +0 -35
  238. data/doc/ex/matte_fill_to_border.rb +0 -39
  239. data/doc/ex/matte_floodfill.rb +0 -32
  240. data/doc/ex/matte_replace.rb +0 -39
  241. data/doc/ex/median_filter.rb +0 -28
  242. data/doc/ex/modulate.rb +0 -11
  243. data/doc/ex/mono.rb +0 -23
  244. data/doc/ex/morph.rb +0 -25
  245. data/doc/ex/mosaic.rb +0 -35
  246. data/doc/ex/motion_blur.rb +0 -11
  247. data/doc/ex/negate.rb +0 -11
  248. data/doc/ex/negate_channel.rb +0 -9
  249. data/doc/ex/nested_rvg.rb +0 -21
  250. data/doc/ex/nonzero.rb +0 -42
  251. data/doc/ex/normalize.rb +0 -11
  252. data/doc/ex/oil_paint.rb +0 -11
  253. data/doc/ex/opacity.rb +0 -37
  254. data/doc/ex/ordered_dither.rb +0 -11
  255. data/doc/ex/path.rb +0 -63
  256. data/doc/ex/pattern1.rb +0 -25
  257. data/doc/ex/pattern2.rb +0 -26
  258. data/doc/ex/polaroid.rb +0 -27
  259. data/doc/ex/polygon.rb +0 -23
  260. data/doc/ex/polygon01.rb +0 -21
  261. data/doc/ex/polyline.rb +0 -22
  262. data/doc/ex/polyline01.rb +0 -21
  263. data/doc/ex/posterize.rb +0 -8
  264. data/doc/ex/preview.rb +0 -8
  265. data/doc/ex/qbezierpath.rb +0 -52
  266. data/doc/ex/quad01.rb +0 -34
  267. data/doc/ex/quantize-m.rb +0 -25
  268. data/doc/ex/radial_blur.rb +0 -9
  269. data/doc/ex/raise.rb +0 -8
  270. data/doc/ex/random_threshold_channel.rb +0 -13
  271. data/doc/ex/rect01.rb +0 -14
  272. data/doc/ex/rect02.rb +0 -20
  273. data/doc/ex/rectangle.rb +0 -34
  274. data/doc/ex/reduce_noise.rb +0 -28
  275. data/doc/ex/remap.rb +0 -11
  276. data/doc/ex/remap_images.rb +0 -19
  277. data/doc/ex/resize_to_fill.rb +0 -8
  278. data/doc/ex/resize_to_fit.rb +0 -8
  279. data/doc/ex/roll.rb +0 -9
  280. data/doc/ex/rotate.rb +0 -44
  281. data/doc/ex/rotate_f.rb +0 -14
  282. data/doc/ex/roundrect.rb +0 -33
  283. data/doc/ex/rubyname.rb +0 -30
  284. data/doc/ex/rvg_clippath.rb +0 -12
  285. data/doc/ex/rvg_linecap.rb +0 -42
  286. data/doc/ex/rvg_linejoin.rb +0 -40
  287. data/doc/ex/rvg_opacity.rb +0 -18
  288. data/doc/ex/rvg_pattern.rb +0 -26
  289. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  290. data/doc/ex/segment.rb +0 -11
  291. data/doc/ex/sepiatone.rb +0 -7
  292. data/doc/ex/shade.rb +0 -11
  293. data/doc/ex/shadow.rb +0 -30
  294. data/doc/ex/shave.rb +0 -15
  295. data/doc/ex/shear.rb +0 -10
  296. data/doc/ex/sketch.rb +0 -17
  297. data/doc/ex/skewx.rb +0 -51
  298. data/doc/ex/skewy.rb +0 -47
  299. data/doc/ex/smile.rb +0 -125
  300. data/doc/ex/solarize.rb +0 -11
  301. data/doc/ex/sparse_color.rb +0 -54
  302. data/doc/ex/splice.rb +0 -8
  303. data/doc/ex/spread.rb +0 -11
  304. data/doc/ex/stegano.rb +0 -55
  305. data/doc/ex/stroke_dasharray.rb +0 -42
  306. data/doc/ex/stroke_fill.rb +0 -10
  307. data/doc/ex/stroke_linecap.rb +0 -44
  308. data/doc/ex/stroke_linejoin.rb +0 -48
  309. data/doc/ex/stroke_width.rb +0 -49
  310. data/doc/ex/swirl.rb +0 -17
  311. data/doc/ex/text.rb +0 -37
  312. data/doc/ex/text01.rb +0 -16
  313. data/doc/ex/text_align.rb +0 -36
  314. data/doc/ex/text_antialias.rb +0 -37
  315. data/doc/ex/text_styles.rb +0 -19
  316. data/doc/ex/text_undercolor.rb +0 -28
  317. data/doc/ex/texture_fill_to_border.rb +0 -34
  318. data/doc/ex/texture_floodfill.rb +0 -32
  319. data/doc/ex/texturefill.rb +0 -24
  320. data/doc/ex/threshold.rb +0 -13
  321. data/doc/ex/to_blob.rb +0 -13
  322. data/doc/ex/translate.rb +0 -39
  323. data/doc/ex/transparent.rb +0 -38
  324. data/doc/ex/transpose.rb +0 -9
  325. data/doc/ex/transverse.rb +0 -9
  326. data/doc/ex/tref01.rb +0 -24
  327. data/doc/ex/triangle01.rb +0 -15
  328. data/doc/ex/trim.rb +0 -23
  329. data/doc/ex/tspan01.rb +0 -17
  330. data/doc/ex/tspan02.rb +0 -17
  331. data/doc/ex/tspan03.rb +0 -19
  332. data/doc/ex/unsharp_mask.rb +0 -28
  333. data/doc/ex/viewex.rb +0 -33
  334. data/doc/ex/vignette.rb +0 -12
  335. data/doc/ex/watermark.rb +0 -27
  336. data/doc/ex/wave.rb +0 -9
  337. data/doc/ex/wet_floor.rb +0 -58
  338. data/doc/ex/writing_mode01.rb +0 -26
  339. data/doc/ex/writing_mode02.rb +0 -26
  340. data/doc/ilist.html +0 -2056
  341. data/doc/image1.html +0 -4680
  342. data/doc/image2.html +0 -3665
  343. data/doc/image3.html +0 -4522
  344. data/doc/imageattrs.html +0 -1638
  345. data/doc/imusage.html +0 -514
  346. data/doc/index.html +0 -416
  347. data/doc/info.html +0 -1499
  348. data/doc/magick.html +0 -565
  349. data/doc/optequiv.html +0 -2435
  350. data/doc/rvg.html +0 -975
  351. data/doc/rvgclip.html +0 -248
  352. data/doc/rvggroup.html +0 -305
  353. data/doc/rvgimage.html +0 -289
  354. data/doc/rvgpattern.html +0 -475
  355. data/doc/rvgshape.html +0 -406
  356. data/doc/rvgstyle.html +0 -270
  357. data/doc/rvgtext.html +0 -465
  358. data/doc/rvgtspan.html +0 -238
  359. data/doc/rvgtut.html +0 -530
  360. data/doc/rvguse.html +0 -145
  361. data/doc/rvgxform.html +0 -294
  362. data/doc/scripts/doc.js +0 -22
  363. data/doc/scripts/stripeTables.js +0 -23
  364. data/doc/struct.html +0 -1339
  365. data/doc/usage.html +0 -1621
  366. data/examples/constitute.rb +0 -7
  367. data/examples/crop_with_gravity.rb +0 -42
  368. data/examples/demo.rb +0 -324
  369. data/examples/describe.rb +0 -43
  370. data/examples/find_similar_region.rb +0 -34
  371. data/examples/histogram.rb +0 -321
  372. data/examples/identify.rb +0 -185
  373. data/examples/image_opacity.rb +0 -29
  374. data/examples/import_export.rb +0 -31
  375. data/examples/pattern_fill.rb +0 -38
  376. data/examples/rotating_text.rb +0 -44
  377. data/examples/spinner.rb +0 -49
  378. data/examples/thumbnail.rb +0 -64
  379. data/examples/vignette.rb +0 -78
  380. data/spec/rmagick/ImageList1_spec.rb +0 -24
  381. data/spec/rmagick/draw_spec.rb +0 -156
  382. data/spec/rmagick/image/blue_shift_spec.rb +0 -16
  383. data/spec/rmagick/image/composite_spec.rb +0 -140
  384. data/spec/rmagick/image/constitute_spec.rb +0 -15
  385. data/spec/rmagick/image/dispatch_spec.rb +0 -18
  386. data/spec/rmagick/image/from_blob_spec.rb +0 -14
  387. data/spec/rmagick/image/ping_spec.rb +0 -14
  388. data/spec/rmagick/image/properties_spec.rb +0 -29
  389. data/spec/spec_helper.rb +0 -4
  390. data/test/Image1.rb +0 -565
  391. data/test/Image2.rb +0 -1304
  392. data/test/Image3.rb +0 -1030
  393. data/test/ImageList1.rb +0 -806
  394. data/test/ImageList2.rb +0 -385
  395. data/test/Image_attributes.rb +0 -697
  396. data/test/Import_Export.rb +0 -121
  397. data/test/Info.rb +0 -345
  398. data/test/Magick.rb +0 -321
  399. data/test/Pixel.rb +0 -116
  400. data/test/Preview.rb +0 -57
  401. data/test/cmyk.icm +0 -0
  402. data/test/srgb.icm +0 -0
  403. data/test/test_all_basic.rb +0 -38
  404. data/test/tmpnam_test.rb +0 -50
  405. data/wercker.yml +0 -10
data/examples/spinner.rb DELETED
@@ -1,49 +0,0 @@
1
- # Make a 32x32 animated GIF that resembles the OS X animation.
2
- # This produces a very small (~2.6Kb) GIF file.
3
-
4
- require 'rmagick'
5
-
6
- puts <<END_INFO
7
- This example creates an animated GIF that resembles the OS X "waiting" icon.
8
- You can view the GIF with the command
9
-
10
- animate spinner.gif
11
- END_INFO
12
-
13
- NFRAMES = 12 # number of frames in the animation
14
- DIM = 32 # width & height of image in pixels
15
- DELAY = 100.0 / (NFRAMES/2) # 2 rotations per second
16
-
17
- # 'frame' is a single frame in the animation.
18
- frame = Magick::Image.new(DIM, DIM) {self.background_color = 'transparent'}
19
-
20
- # 'spinner' will contain the frames that make up the animated GIF
21
- spinner = Magick::ImageList.new
22
-
23
- # 'level' is the change from darkest gray to white
24
- level = Magick::QuantumRange / 2 / NFRAMES
25
-
26
- NFRAMES.times do |x|
27
- gc = Magick::Draw.new
28
- gc.translate(DIM/2, DIM/2)
29
- gc.stroke('none')
30
- intensity = 0.58 * Magick::QuantumRange
31
- fill_color = Magick::Pixel.new(intensity, intensity, intensity).to_color
32
- gc.fill(fill_color)
33
- angle = x * (360/NFRAMES)
34
- NFRAMES.times do
35
- gc.rotate(angle)
36
- intensity = [intensity, Magick::QuantumRange].min
37
- fill_color = Magick::Pixel.new(intensity, intensity, intensity).to_color
38
- gc.fill(fill_color)
39
- gc.roundrectangle(7, -1, 15, 0, 1, 1)
40
- angle = -(360/NFRAMES)
41
- intensity += level
42
- end
43
- spinner << frame.copy
44
- gc.draw(spinner)
45
- end
46
-
47
- spinner.delay = DELAY
48
- spinner.compression = Magick::LZWCompression
49
- spinner.write('spinner.gif')
@@ -1,64 +0,0 @@
1
- require 'rmagick'
2
- include Magick
3
-
4
- puts <<END_INFO
5
-
6
- This example demonstrates how to make a thumbnail of an image.
7
- An image is resized to the target size (retaining its original
8
- aspect ratio, of course) and then "mounted" on a square background
9
- with raised edges.
10
-
11
- Usage:
12
-
13
- ruby thumbnail.rb <filename <size>>
14
-
15
- where `filename' is the name of an image file and `size' is the
16
- size of the thumbnail in pixels. The default size is 120 pixels.
17
- If you don't specify any arguments this script uses a default
18
- image.
19
-
20
- END_INFO
21
-
22
- DEFAULT_SIZE = 120
23
-
24
- case ARGV.length
25
- when 2
26
- size = ARGV[1].to_i
27
- image = ARGV[0]
28
- when 1
29
- image = ARGV[0]
30
- size = DEFAULT_SIZE
31
- else
32
- size = DEFAULT_SIZE
33
- image = '../doc/ex/images/Flower_Hat.jpg'
34
- end
35
-
36
- geom = "#{size}x#{size}"
37
-
38
- # Read the image and resize it. The `change_geometry' method
39
- # computes the new image geometry and yields to a block. The
40
- # return value of the block is the return value of the method.
41
-
42
- img = Image.read(image)[0]
43
- img.change_geometry!(geom) { |cols, rows| img.thumbnail! cols, rows }
44
-
45
- # We need a background to display the thumbnail.
46
- # Create a square, neutral gray background with raised edges.
47
- # Make this background slightly larger than the image to allow
48
- # for the raised border. A 3-pixel raised edge means that the
49
- # background needs to be 6 pixels larger in each dimension.
50
-
51
- bg = Image.new(size+6, size+6) { self.background_color = 'gray75' }
52
- bg = bg.raise(3,3)
53
-
54
- # Just for the purposes of this example, display the thumbnail background on
55
- # a larger white background.
56
-
57
- white_bg = Image.new(size+50, size+50) {self.background_color = 'white'}
58
- white_bg = white_bg.composite(bg, CenterGravity, OverCompositeOp)
59
-
60
- # Finally, center the thumbnail on the gray background.
61
- thumbnail = white_bg.composite(img, CenterGravity, OverCompositeOp)
62
-
63
- thumbnail.write('thumbnail.gif')
64
- exit
data/examples/vignette.rb DELETED
@@ -1,78 +0,0 @@
1
- require 'rmagick'
2
- include Magick
3
-
4
- puts <<END_INFO
5
-
6
- vi-gnette (n.) vin-'yet
7
- A picture that shades off gradually into the surrounding paper.
8
- Merriam-Webster Dictionary
9
-
10
- Vignettes are frequently used in formal portraiture and advertising
11
- images. This example creates a vignette from a picture of a ballerina.
12
- It takes a few seconds to run. Be patient.
13
-
14
- END_INFO
15
-
16
- ballerina = Image.read('../doc/ex/images/Ballerina3.jpg')[0]
17
-
18
- # Note: this technique won't work with every image. To make a pretty
19
- # vignette you need an image with a uniform, fairly dark background.
20
-
21
- # Start by drawing a white oval on a black background. (Although you don't
22
- # have to use an oval at all! Any shape will work. Try a rounded rectangle.)
23
- # The black pixels correspond to pixels in the image that will become
24
- # transparent. The white pixels correspond to pixels in the image that will
25
- # remain unchanged. Gray pixels, introduced by the blurring below, will
26
- # become more or less transparent depending on how dark or light the pixel is.
27
-
28
- # The size of the oval is arbitrary - in this case it's 90% of the
29
- # size of the image.
30
-
31
- oval = Image.new(ballerina.columns, ballerina.rows) {self.background_color = 'black'}
32
- gc = Draw.new
33
- gc.stroke('white')
34
- gc.fill('white')
35
- gc.ellipse(ballerina.columns/2, ballerina.rows/2,
36
- ballerina.columns/2-(ballerina.columns*0.10),
37
- ballerina.rows/2-(ballerina.rows*0.10), 0, 360)
38
- gc.draw(oval)
39
-
40
- # Add a lot of blurring to the oval. I use blur_image because it's much faster
41
- # than the gaussian_blur method and produces no observable difference. The
42
- # exact amount of blurring is a judgment call. The higher the 2nd argument, the
43
- # more blurring, although increasing the value above 20 doesn't seem to add any
44
- # additional blurriness.
45
-
46
- oval = oval.blur_image(0, 20)
47
-
48
- # The CopyOpacityCompositeOp transforms the opacity level of each image pixel
49
- # according to the intensity of the composite image pixels. In this case, the
50
- # black pixels outside the oval become transparent and the white pixels inside
51
- # the oval remain opaque. Each gray pixel around the border of the oval has a
52
- # varying level of transparency depending on how dark or light it is.
53
-
54
- ballerina.matte = true # Ensure the ballerina image's opacity channel is enabled.
55
- oval.matte = false # Force the CopyOpacityCompositeOp to use pixel intensity
56
- # to determine how much transparency to add to the ballerina
57
- # pixels.
58
-
59
- ballerina = ballerina.composite(oval, CenterGravity, CopyOpacityCompositeOp)
60
-
61
- # Since the vignette has multiple levels of transparency, we can't
62
- # save it as a GIF or a JPEG. The PNG format can handle it, though.
63
-
64
- begin
65
- ballerina.write('vignette.png')
66
- rescue ImageMagickError
67
- puts 'Write failed. No PNG support?'
68
- # In case PNG support isn't installed, just ignore the exception.
69
- end
70
-
71
- # At this point the vignette is complete. However, the `display' method only
72
- # supports 1`level of transparency. Therefore, composite the vignette over a
73
- # standard "checkerboard" background. The resulting image will be 100% opaque.
74
-
75
- checkerboard = Image.read('pattern:checkerboard') {self.size = "#{ballerina.columns}x#{ballerina.rows}"}
76
- vignette = checkerboard[0].composite(ballerina, CenterGravity, OverCompositeOp)
77
- vignette.display
78
- exit
@@ -1,24 +0,0 @@
1
- RSpec.describe Magick::ImageList do
2
- describe 'images_from_imagelist' do
3
- it 'works with identical instances' do
4
- expect do
5
- img = Magick::Image.new(1, 1)
6
- list = Magick::ImageList.new
7
- list << img << img
8
- res = list.append(false)
9
- expect(res.columns).to eq(2)
10
- expect(res.rows).to eq(1)
11
- end.not_to raise_error
12
-
13
- expect do
14
- img = Magick::Image.new(1, 1)
15
- img2 = Magick::Image.new(3, 3)
16
- list = Magick::ImageList.new
17
- list.concat([img, img2, img, img2, img])
18
- res = list.append(false)
19
- expect(res.columns).to eq(9)
20
- expect(res.rows).to eq(3)
21
- end.not_to raise_error
22
- end
23
- end
24
- end
@@ -1,156 +0,0 @@
1
- class Magick::Draw
2
- def self._dummy_img_
3
- @@_dummy_img_
4
- end
5
- end
6
-
7
- RSpec.describe Magick::Draw do
8
- let(:draw) { Magick::Draw.new }
9
-
10
- describe '._dummy_img_' do
11
- it 'works' do
12
- # initially this variable is not defined.
13
- expect { Magick::Draw._dummy_img_ }.to raise_error(NameError)
14
-
15
- # cause it to become defined. save the object id.
16
- draw.get_type_metrics('ABCDEF')
17
- dummy = nil
18
- expect { dummy = Magick::Draw._dummy_img_ }.not_to raise_error
19
-
20
- expect(dummy).to be_instance_of(Magick::Image)
21
-
22
- # ensure that it is always the same object
23
- draw.get_type_metrics('ABCDEF')
24
- dummy2 = nil
25
- expect { dummy2 = Magick::Draw._dummy_img_ }.not_to raise_error
26
- expect(dummy).to eq dummy2
27
- end
28
- end
29
-
30
- describe '#kerning=' do
31
- it 'assigns without raising an error' do
32
- expect { draw.kerning = 1 }.not_to raise_error
33
- end
34
- end
35
-
36
- describe '#kerning' do
37
- it 'accepts a valid parameter without raising an error' do
38
- expect { draw.kerning(1) }.not_to raise_error
39
- end
40
-
41
- it 'raises an error when given an invalid parameter' do
42
- expect { draw.kerning('a') }.to raise_error(ArgumentError)
43
- expect { draw.kerning([]) }.to raise_error(TypeError)
44
- end
45
- end
46
-
47
- describe '#interline_spacing=' do
48
- it 'assigns without raising an error' do
49
- expect { draw.interline_spacing = 1 }.not_to raise_error
50
- end
51
- end
52
-
53
- describe '#interline_spacing' do
54
- it 'accepts a valid parameter without raising an error' do
55
- expect { draw.interline_spacing(1) }.not_to raise_error
56
- end
57
-
58
- it 'raises an error when given an invalid parameter' do
59
- expect { draw.interline_spacing('a') }.to raise_error(ArgumentError)
60
- expect { draw.interline_spacing([]) }.to raise_error(TypeError)
61
- end
62
- end
63
-
64
- describe '#interword_spacing=' do
65
- it 'assigns without raising an error' do
66
- expect { draw.interword_spacing = 1 }.not_to raise_error
67
- end
68
- end
69
-
70
- describe '#interword_spacing' do
71
- it 'accepts a valid parameter without raising an error' do
72
- expect { draw.interword_spacing(1) }.not_to raise_error
73
- end
74
-
75
- it 'raises an error when given an invalid parameter' do
76
- expect { draw.interword_spacing('a') }.to raise_error(ArgumentError)
77
- expect { draw.interword_spacing([]) }.to raise_error(TypeError)
78
- end
79
- end
80
-
81
- describe '#marshal_dump', '#marshal_load' do
82
- it 'marshals without an error' do
83
- skip 'this spec fails on some versions of ImageMagick'
84
- rose = Magick::Image.read('rose:').first
85
- granite = Magick::Image.read('granite:').first
86
- s = granite.to_blob { self.format = 'miff' }
87
- granite = Magick::Image.from_blob(s).first
88
- blue_stroke = Magick::Image.new(20,20) { self.background_color = 'blue' }
89
- s = blue_stroke.to_blob { self.format = 'miff' }
90
- blue_stroke = Magick::Image.from_blob(s).first
91
-
92
- draw.affine = Magick::AffineMatrix.new(1, 2, 3, 4, 5, 6)
93
- draw.decorate = Magick::LineThroughDecoration
94
- draw.encoding = 'AdobeCustom'
95
- draw.gravity = Magick::CenterGravity
96
- draw.fill = Magick::Pixel.from_color('red')
97
- draw.stroke = Magick::Pixel.from_color('blue')
98
- draw.stroke_width = 5
99
- draw.fill_pattern = granite
100
- draw.stroke_pattern = blue_stroke
101
- draw.text_antialias = true
102
- draw.font = 'Arial-Bold'
103
- draw.font_family = 'arial'
104
- draw.font_style = Magick::ItalicStyle
105
- draw.font_stretch = Magick::CondensedStretch
106
- draw.font_weight = Magick::BoldWeight
107
- draw.pointsize = 12
108
- draw.density = '72x72'
109
- draw.align = Magick::CenterAlign
110
- draw.undercolor = Magick::Pixel.from_color('green')
111
- draw.kerning = 10.5
112
- draw.interword_spacing = 3.75
113
-
114
- draw.circle(20, 25, 20, 28)
115
- dumped = nil
116
- expect { dumped = Marshal.dump(draw) }.not_to raise_error
117
- expect { Marshal.load(dumped) }.not_to raise_error
118
- end
119
- end
120
-
121
- describe '#fill_pattern' do
122
- it 'accepts an Image argument' do
123
- img = Magick::Image.new(20,20)
124
- expect { draw.fill_pattern = img }.not_to raise_error
125
- end
126
-
127
- it 'accepts an ImageList argument' do
128
- img = Magick::Image.new(20,20)
129
- ilist = Magick::ImageList.new
130
- ilist << img
131
- expect { draw.fill_pattern = ilist }.not_to raise_error
132
- end
133
-
134
- it 'does not accept arbitrary arguments' do
135
- expect { draw.fill_pattern = 1 }.to raise_error(NoMethodError)
136
- end
137
- end
138
-
139
- describe '#stroke_pattern' do
140
- it 'accepts an Image argument' do
141
- img = Magick::Image.new(20,20)
142
- expect { draw.stroke_pattern = img }.not_to raise_error
143
- end
144
-
145
- it 'accepts an ImageList argument' do
146
- img = Magick::Image.new(20,20)
147
- ilist = Magick::ImageList.new
148
- ilist << img
149
- expect { draw.stroke_pattern = ilist }.not_to raise_error
150
- end
151
-
152
- it 'does not accept arbitrary arguments' do
153
- expect { draw.stroke_pattern = 1 }.to raise_error(NoMethodError)
154
- end
155
- end
156
- end
@@ -1,16 +0,0 @@
1
- RSpec.describe Magick::Image, '#blue_shift' do
2
-
3
- let(:img) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
4
-
5
- it 'returns a new Image' do
6
- res = img.blue_shift
7
- expect(res).to be_instance_of(Magick::Image)
8
- expect(res).not_to eq img
9
- end
10
-
11
- it 'accepts one argument' do
12
- expect { img.blue_shift(2) }.not_to raise_error
13
- expect { img.blue_shift(2, 3) }.to raise_error(ArgumentError)
14
- end
15
-
16
- end
@@ -1,140 +0,0 @@
1
- RSpec.describe Magick::Image, '#composite' do
2
-
3
- let(:img1) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
4
- let(:img2) { Magick::Image.read(IMAGES_DIR+'/Button_1.gif').first }
5
- let(:composite_ops) do
6
- [
7
- Magick::UndefinedCompositeOp,
8
- Magick::NoCompositeOp,
9
- Magick::AddCompositeOp,
10
- Magick::AtopCompositeOp,
11
- Magick::BumpmapCompositeOp,
12
- Magick::ClearCompositeOp,
13
- Magick::ColorizeCompositeOp,
14
- Magick::CopyBlueCompositeOp,
15
- Magick::CopyCompositeOp,
16
- Magick::CopyGreenCompositeOp,
17
- Magick::CopyOpacityCompositeOp,
18
- Magick::CopyRedCompositeOp,
19
- Magick::CopyCyanCompositeOp,
20
- Magick::CopyMagentaCompositeOp,
21
- Magick::CopyYellowCompositeOp,
22
- Magick::CopyBlackCompositeOp,
23
- Magick::DarkenCompositeOp,
24
- Magick::DifferenceCompositeOp,
25
- Magick::DisplaceCompositeOp,
26
- Magick::DissolveCompositeOp,
27
- Magick::DstAtopCompositeOp,
28
- Magick::DstCompositeOp,
29
- Magick::DstInCompositeOp,
30
- Magick::DstOutCompositeOp,
31
- Magick::DstOverCompositeOp,
32
- Magick::HueCompositeOp,
33
- Magick::InCompositeOp,
34
- Magick::LightenCompositeOp,
35
- Magick::LuminizeCompositeOp,
36
- Magick::MinusCompositeOp,
37
- Magick::ModulateCompositeOp,
38
- Magick::MultiplyCompositeOp,
39
- Magick::OutCompositeOp,
40
- Magick::OverCompositeOp,
41
- Magick::OverlayCompositeOp,
42
- Magick::PlusCompositeOp,
43
- Magick::ReplaceCompositeOp,
44
- Magick::SaturateCompositeOp,
45
- Magick::ScreenCompositeOp,
46
- Magick::SrcAtopCompositeOp,
47
- Magick::SrcCompositeOp,
48
- Magick::SrcInCompositeOp,
49
- Magick::SrcOutCompositeOp,
50
- Magick::SrcOverCompositeOp,
51
- Magick::SubtractCompositeOp,
52
- Magick::ThresholdCompositeOp,
53
- Magick::XorCompositeOp,
54
- Magick::BlendCompositeOp,
55
- Magick::ColorBurnCompositeOp,
56
- Magick::ColorDodgeCompositeOp,
57
- Magick::ExclusionCompositeOp,
58
- Magick::HardLightCompositeOp,
59
- Magick::SoftLightCompositeOp
60
- ]
61
- end
62
- let(:gravity) do
63
- [
64
- Magick::NorthEastGravity,
65
- Magick::EastGravity,
66
- Magick::SouthWestGravity,
67
- Magick::SouthGravity,
68
- Magick::SouthEastGravity
69
- ]
70
- end
71
-
72
- it 'raises an error given invalid arguments' do
73
- expect { img1.composite }.to raise_error(ArgumentError)
74
- expect { img1.composite(img2) }.to raise_error(ArgumentError)
75
- expect do
76
- img1.composite(img2, Magick::NorthWestGravity)
77
- end.to raise_error(ArgumentError)
78
- expect { img1.composite(2) }.to raise_error(ArgumentError)
79
- expect { img1.composite(img2, 2) }.to raise_error(ArgumentError)
80
- end
81
-
82
- context 'when given 3 arguments' do
83
- it 'works when 2nd argument is a gravity' do
84
- composite_ops.each do |op|
85
- gravity.each do |grav|
86
- expect { img1.composite(img2, grav, op) }.not_to raise_error
87
- end
88
- end
89
- end
90
-
91
- it 'raises an error when 2nd argument is not a gravity' do
92
- expect do
93
- img1.composite(img2, 2, Magick::OverCompositeOp)
94
- end.to raise_error(TypeError)
95
- end
96
- end
97
-
98
- context 'when given 4 arguments' do
99
- it 'works when 4th argument is a composite operator' do
100
- # there are way too many CompositeOperators to test them all, so just try
101
- # few representative ops
102
- composite_ops.each do |op|
103
- expect { img1.composite(img2, 0, 0, op) }.not_to raise_error
104
- end
105
- end
106
-
107
- it 'returns a new Magick::Image object' do
108
- res = img1.composite(img2, 0, 0, Magick::OverCompositeOp)
109
- expect(res).to be_instance_of(Magick::Image)
110
- end
111
-
112
- it 'raises an error when 4th argument is not a composite operator' do
113
- expect { img1.composite(img2, 0, 0, 2) }.to raise_error(TypeError)
114
- end
115
- end
116
-
117
- context 'when given 5 arguments' do
118
- it 'works when 2nd argument is gravity and 5th is a composite operator' do
119
- composite_ops.each do |op|
120
- gravity.each do |grav|
121
- expect { img1.composite(img2, grav, 0, 0, op) }.not_to raise_error
122
- end
123
- end
124
- end
125
-
126
- it 'raises an error when 2nd argument is not a gravity' do
127
- expect do
128
- img1.composite(img2, 0, 0, 2, Magick::OverCompositeOp)
129
- end.to raise_error(TypeError)
130
- end
131
- end
132
-
133
- it 'raises an error when the image has been destroyed' do
134
- img2.destroy!
135
- expect do
136
- img1.composite(img2, Magick::CenterGravity, Magick::OverCompositeOp)
137
- end.to raise_error(Magick::DestroyedImageError)
138
- end
139
-
140
- end
@@ -1,15 +0,0 @@
1
- RSpec.describe Magick::Image, '#constitute' do
2
-
3
- let(:img) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
4
- let(:pixels) { img.dispatch(0, 0, img.columns, img.rows, 'RGBA') }
5
-
6
- it 'returns an equivalent image to the given pixels' do
7
- res = Magick::Image.constitute(img.columns, img.rows, 'RGBA', pixels)
8
- # The constituted image is in MIFF format so we
9
- # can't compare it directly to the original image.
10
- expect(res.columns).to eq img.columns
11
- expect(res.rows).to eq img.rows
12
- expect(pixels.all? { |v| 0 <= v && v <= Magick::QuantumRange }).to be true
13
- end
14
-
15
- end
@@ -1,18 +0,0 @@
1
- RSpec.describe Magick::Image, '#dispatch' do
2
-
3
- let(:img) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
4
-
5
- it 'expects exactly 5 or 6 arguments' do
6
- expect { img.dispatch }.to raise_error(ArgumentError)
7
- expect { img.dispatch(0) }.to raise_error(ArgumentError)
8
- expect { img.dispatch(0, 0) }.to raise_error(ArgumentError)
9
- expect { img.dispatch(0, 0, img.columns) }.to raise_error(ArgumentError)
10
- expect do
11
- img.dispatch(0, 0, img.columns, img.rows)
12
- end.to raise_error(ArgumentError)
13
- expect do
14
- img.dispatch(0, 0, 20, 20, 'RGBA', false, false)
15
- end.to raise_error(ArgumentError)
16
- end
17
-
18
- end
@@ -1,14 +0,0 @@
1
- RSpec.describe Magick::Image, '#from_blob' do
2
-
3
- let(:img) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
4
- let(:blob) { img.to_blob }
5
-
6
- it 'returns an image equal to the original' do
7
- expect(blob).to be_instance_of(String)
8
- res = Magick::Image.from_blob(blob)
9
- expect(res).to be_instance_of(Array)
10
- expect(res.first).to be_instance_of(Magick::Image)
11
- expect(res.first).to eq img
12
- end
13
-
14
- end
@@ -1,14 +0,0 @@
1
- RSpec.describe Magick::Image, '#ping' do
2
-
3
- it 'returns an image from the source, omitting pixel data' do
4
- res = Magick::Image.ping(IMAGES_DIR+'/Button_0.gif')
5
- expect(res).to be_instance_of(Array)
6
- image = res.first
7
- expect(image).to be_instance_of(Magick::Image)
8
- expect(image.format).to eq 'GIF'
9
- expect(image.columns).to eq 127
10
- expect(image.rows).to eq 120
11
- expect(image.filename).to match(/Button_0.gif/)
12
- end
13
-
14
- end
@@ -1,29 +0,0 @@
1
- RSpec.describe Magick::Image, '#properties' do
2
-
3
- let(:img) { Magick::Image.new(20, 20) }
4
- let(:freeze_error) { RUBY_VERSION[/^1\.9|^2/] ? RuntimeError : TypeError }
5
-
6
- before(:each) do
7
- img['a'] = 'str_1'
8
- img['b'] = 'str_2'
9
- img['c'] = 'str_3'
10
- end
11
-
12
- it 'allows assignment of arbitrary properties' do
13
- expect(img['a']).to eq 'str_1'
14
- expect(img['b']).to eq 'str_2'
15
- expect(img['c']).to eq 'str_3'
16
- expect(img['d']).to be nil
17
- end
18
-
19
- it 'returns a hash of assigned properties' do
20
- expected_properties = { 'a' => 'str_1', 'b' => 'str_2', 'c' => 'str_3' }
21
- expect(img.properties).to eq(expected_properties)
22
- end
23
-
24
- it 'raises an error when trying to assign properties to a frozen image' do
25
- img.freeze
26
- expect { img['d'] = 'str_4' }.to raise_error(freeze_error)
27
- end
28
-
29
- end
data/spec/spec_helper.rb DELETED
@@ -1,4 +0,0 @@
1
- require 'rmagick'
2
-
3
- root_dir = File.expand_path('../..', __FILE__)
4
- IMAGES_DIR = File.join(root_dir, 'doc/ex/images')