rmagick 4.1.0.rc1 → 4.2.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 (414) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +3 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/workflows/ci.yml +108 -0
  6. data/.gitignore +3 -1
  7. data/.rspec +1 -0
  8. data/.rubocop.yml +24 -0
  9. data/.rubocop_todo.yml +151 -297
  10. data/.yardopts +5 -0
  11. data/CHANGELOG.md +94 -0
  12. data/CODE_OF_CONDUCT.md +122 -7
  13. data/CONTRIBUTING.md +14 -10
  14. data/README.md +324 -0
  15. data/Rakefile +16 -22
  16. data/before_install_linux.sh +22 -32
  17. data/before_install_osx.sh +57 -2
  18. data/ext/RMagick/extconf.rb +108 -95
  19. data/ext/RMagick/rmagick.c +77 -104
  20. data/ext/RMagick/rmagick.h +77 -70
  21. data/ext/RMagick/rmdraw.c +289 -446
  22. data/ext/RMagick/rmenum.c +96 -113
  23. data/ext/RMagick/rmfill.c +49 -77
  24. data/ext/RMagick/rmilist.c +144 -244
  25. data/ext/RMagick/rmimage.c +3416 -4169
  26. data/ext/RMagick/rminfo.c +540 -738
  27. data/ext/RMagick/rmkinfo.c +21 -87
  28. data/ext/RMagick/rmmain.c +419 -246
  29. data/ext/RMagick/rmmontage.c +60 -126
  30. data/ext/RMagick/rmpixel.c +401 -345
  31. data/ext/RMagick/rmstruct.c +62 -88
  32. data/ext/RMagick/rmutil.c +148 -228
  33. data/lib/rmagick/version.rb +1 -1
  34. data/lib/rmagick_internal.rb +128 -77
  35. data/lib/rvg/clippath.rb +2 -1
  36. data/lib/rvg/container.rb +10 -5
  37. data/lib/rvg/describable.rb +1 -1
  38. data/lib/rvg/embellishable.rb +5 -4
  39. data/lib/rvg/misc.rb +15 -12
  40. data/lib/rvg/paint.rb +2 -1
  41. data/lib/rvg/pathdata.rb +12 -11
  42. data/lib/rvg/rvg.rb +8 -4
  43. data/lib/rvg/stylable.rb +9 -7
  44. data/lib/rvg/text.rb +11 -6
  45. data/lib/rvg/transformable.rb +3 -2
  46. data/lib/rvg/units.rb +1 -1
  47. data/rmagick.gemspec +8 -6
  48. metadata +46 -421
  49. data/.appveyor.yml +0 -57
  50. data/.circleci/config.yml +0 -56
  51. data/.ruby-version +0 -1
  52. data/.simplecov +0 -27
  53. data/.travis.yml +0 -64
  54. data/Doxyfile +0 -1514
  55. data/README.textile +0 -259
  56. data/benchmarks/memory/README.md +0 -50
  57. data/benchmarks/memory/image_new.rb +0 -8
  58. data/benchmarks/memory/rmagick.gnuplot +0 -16
  59. data/doc/.cvsignore +0 -1
  60. data/doc/comtasks.html +0 -287
  61. data/doc/constants.html +0 -1581
  62. data/doc/css/doc.css +0 -299
  63. data/doc/css/popup.css +0 -34
  64. data/doc/css/ref.css +0 -67
  65. data/doc/draw.html +0 -3272
  66. data/doc/ex/InitialCoords.rb +0 -22
  67. data/doc/ex/NewCoordSys.rb +0 -30
  68. data/doc/ex/OrigCoordSys.rb +0 -16
  69. data/doc/ex/PreserveAspectRatio.rb +0 -204
  70. data/doc/ex/RotateScale.rb +0 -36
  71. data/doc/ex/Skew.rb +0 -38
  72. data/doc/ex/Use01.rb +0 -15
  73. data/doc/ex/Use02.rb +0 -20
  74. data/doc/ex/Use03.rb +0 -16
  75. data/doc/ex/ViewBox.rb +0 -31
  76. data/doc/ex/adaptive_threshold.rb +0 -9
  77. data/doc/ex/add_noise.rb +0 -16
  78. data/doc/ex/affine.rb +0 -48
  79. data/doc/ex/affine_transform.rb +0 -20
  80. data/doc/ex/arc.rb +0 -49
  81. data/doc/ex/arcpath.rb +0 -32
  82. data/doc/ex/arcs01.rb +0 -28
  83. data/doc/ex/arcs02.rb +0 -59
  84. data/doc/ex/average.rb +0 -15
  85. data/doc/ex/axes.rb +0 -64
  86. data/doc/ex/baseline_shift01.rb +0 -17
  87. data/doc/ex/bilevel_channel.rb +0 -8
  88. data/doc/ex/blur_image.rb +0 -12
  89. data/doc/ex/border.rb +0 -10
  90. data/doc/ex/bounding_box.rb +0 -42
  91. data/doc/ex/cbezier1.rb +0 -41
  92. data/doc/ex/cbezier2.rb +0 -41
  93. data/doc/ex/cbezier3.rb +0 -41
  94. data/doc/ex/cbezier4.rb +0 -42
  95. data/doc/ex/cbezier5.rb +0 -42
  96. data/doc/ex/cbezier6.rb +0 -53
  97. data/doc/ex/channel.rb +0 -25
  98. data/doc/ex/charcoal.rb +0 -12
  99. data/doc/ex/chop.rb +0 -29
  100. data/doc/ex/circle.rb +0 -33
  101. data/doc/ex/circle01.rb +0 -16
  102. data/doc/ex/clip_path.rb +0 -60
  103. data/doc/ex/coalesce.rb +0 -57
  104. data/doc/ex/color_fill_to_border.rb +0 -29
  105. data/doc/ex/color_floodfill.rb +0 -28
  106. data/doc/ex/color_histogram.rb +0 -47
  107. data/doc/ex/color_reset.rb +0 -11
  108. data/doc/ex/colorize.rb +0 -16
  109. data/doc/ex/colors.rb +0 -64
  110. data/doc/ex/compose_mask.rb +0 -22
  111. data/doc/ex/composite.rb +0 -133
  112. data/doc/ex/composite_layers.rb +0 -52
  113. data/doc/ex/composite_tiled.rb +0 -21
  114. data/doc/ex/contrast.rb +0 -36
  115. data/doc/ex/crop.rb +0 -31
  116. data/doc/ex/crop_with_gravity.rb +0 -42
  117. data/doc/ex/cubic01.rb +0 -43
  118. data/doc/ex/cubic02.rb +0 -91
  119. data/doc/ex/cycle_colormap.rb +0 -21
  120. data/doc/ex/dissolve.rb +0 -12
  121. data/doc/ex/drawcomp.rb +0 -41
  122. data/doc/ex/drop_shadow.rb +0 -60
  123. data/doc/ex/edge.rb +0 -11
  124. data/doc/ex/ellipse.rb +0 -45
  125. data/doc/ex/ellipse01.rb +0 -21
  126. data/doc/ex/emboss.rb +0 -11
  127. data/doc/ex/enhance.rb +0 -28
  128. data/doc/ex/equalize.rb +0 -11
  129. data/doc/ex/evenodd.rb +0 -42
  130. data/doc/ex/fill_pattern.rb +0 -23
  131. data/doc/ex/flatten_images.rb +0 -36
  132. data/doc/ex/flip.rb +0 -11
  133. data/doc/ex/flop.rb +0 -11
  134. data/doc/ex/font_styles.rb +0 -32
  135. data/doc/ex/fonts.rb +0 -16
  136. data/doc/ex/frame.rb +0 -12
  137. data/doc/ex/gaussian_blur.rb +0 -11
  138. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  139. data/doc/ex/get_pixels.rb +0 -45
  140. data/doc/ex/get_type_metrics.rb +0 -142
  141. data/doc/ex/gradientfill.rb +0 -27
  142. data/doc/ex/grav.rb +0 -45
  143. data/doc/ex/gravity.rb +0 -78
  144. data/doc/ex/group.rb +0 -26
  145. data/doc/ex/hatchfill.rb +0 -27
  146. data/doc/ex/image.rb +0 -44
  147. data/doc/ex/images/Apple.miff +0 -0
  148. data/doc/ex/images/Ballerina.jpg +0 -0
  149. data/doc/ex/images/Ballerina3.jpg +0 -0
  150. data/doc/ex/images/Button_0.gif +0 -0
  151. data/doc/ex/images/Button_1.gif +0 -0
  152. data/doc/ex/images/Button_2.gif +0 -0
  153. data/doc/ex/images/Button_3.gif +0 -0
  154. data/doc/ex/images/Button_4.gif +0 -0
  155. data/doc/ex/images/Button_5.gif +0 -0
  156. data/doc/ex/images/Button_6.gif +0 -0
  157. data/doc/ex/images/Button_7.gif +0 -0
  158. data/doc/ex/images/Button_8.gif +0 -0
  159. data/doc/ex/images/Button_9.gif +0 -0
  160. data/doc/ex/images/Button_A.gif +0 -0
  161. data/doc/ex/images/Button_B.gif +0 -0
  162. data/doc/ex/images/Button_C.gif +0 -0
  163. data/doc/ex/images/Button_D.gif +0 -0
  164. data/doc/ex/images/Button_E.gif +0 -0
  165. data/doc/ex/images/Button_F.gif +0 -0
  166. data/doc/ex/images/Button_G.gif +0 -0
  167. data/doc/ex/images/Button_H.gif +0 -0
  168. data/doc/ex/images/Button_I.gif +0 -0
  169. data/doc/ex/images/Button_J.gif +0 -0
  170. data/doc/ex/images/Button_K.gif +0 -0
  171. data/doc/ex/images/Button_L.gif +0 -0
  172. data/doc/ex/images/Button_M.gif +0 -0
  173. data/doc/ex/images/Button_N.gif +0 -0
  174. data/doc/ex/images/Button_O.gif +0 -0
  175. data/doc/ex/images/Button_P.gif +0 -0
  176. data/doc/ex/images/Button_Q.gif +0 -0
  177. data/doc/ex/images/Button_R.gif +0 -0
  178. data/doc/ex/images/Button_S.gif +0 -0
  179. data/doc/ex/images/Button_T.gif +0 -0
  180. data/doc/ex/images/Button_U.gif +0 -0
  181. data/doc/ex/images/Button_V.gif +0 -0
  182. data/doc/ex/images/Button_W.gif +0 -0
  183. data/doc/ex/images/Button_X.gif +0 -0
  184. data/doc/ex/images/Button_Y.gif +0 -0
  185. data/doc/ex/images/Button_Z.gif +0 -0
  186. data/doc/ex/images/Cheetah.jpg +0 -0
  187. data/doc/ex/images/Coffee.png +0 -0
  188. data/doc/ex/images/Flower_Hat.jpg +0 -0
  189. data/doc/ex/images/Gold_Statue.jpg +0 -0
  190. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  191. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  192. data/doc/ex/images/Leaf.miff +0 -0
  193. data/doc/ex/images/No.png +0 -0
  194. data/doc/ex/images/Polynesia.jpg +0 -0
  195. data/doc/ex/images/Red_Rocks.jpg +0 -0
  196. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  197. data/doc/ex/images/Shorts.jpg +0 -0
  198. data/doc/ex/images/Snake.png +0 -0
  199. data/doc/ex/images/Violin.jpg +0 -0
  200. data/doc/ex/images/Yellow_Rose.miff +0 -0
  201. data/doc/ex/images/big-duck.gif +0 -0
  202. data/doc/ex/images/duck.gif +0 -0
  203. data/doc/ex/images/duck0.gif +0 -0
  204. data/doc/ex/images/duck1.gif +0 -0
  205. data/doc/ex/images/duck10.gif +0 -0
  206. data/doc/ex/images/duck11.gif +0 -0
  207. data/doc/ex/images/duck12.gif +0 -0
  208. data/doc/ex/images/duck13.gif +0 -0
  209. data/doc/ex/images/duck14.gif +0 -0
  210. data/doc/ex/images/duck15.gif +0 -0
  211. data/doc/ex/images/duck2.gif +0 -0
  212. data/doc/ex/images/duck3.gif +0 -0
  213. data/doc/ex/images/duck4.gif +0 -0
  214. data/doc/ex/images/duck5.gif +0 -0
  215. data/doc/ex/images/duck6.gif +0 -0
  216. data/doc/ex/images/duck7.gif +0 -0
  217. data/doc/ex/images/duck8.gif +0 -0
  218. data/doc/ex/images/duck9.gif +0 -0
  219. data/doc/ex/images/graydient230x6.gif +0 -0
  220. data/doc/ex/images/image_with_profile.jpg +0 -0
  221. data/doc/ex/images/logo400x83.gif +0 -0
  222. data/doc/ex/images/model.miff +0 -0
  223. data/doc/ex/images/notimplemented.gif +0 -0
  224. data/doc/ex/images/smile.miff +0 -0
  225. data/doc/ex/images/spin.gif +0 -0
  226. data/doc/ex/implode.rb +0 -34
  227. data/doc/ex/level.rb +0 -11
  228. data/doc/ex/level_colors.rb +0 -11
  229. data/doc/ex/line.rb +0 -41
  230. data/doc/ex/line01.rb +0 -21
  231. data/doc/ex/mask.rb +0 -35
  232. data/doc/ex/matte_fill_to_border.rb +0 -39
  233. data/doc/ex/matte_floodfill.rb +0 -32
  234. data/doc/ex/matte_replace.rb +0 -39
  235. data/doc/ex/median_filter.rb +0 -28
  236. data/doc/ex/modulate.rb +0 -11
  237. data/doc/ex/mono.rb +0 -23
  238. data/doc/ex/morph.rb +0 -25
  239. data/doc/ex/mosaic.rb +0 -37
  240. data/doc/ex/motion_blur.rb +0 -11
  241. data/doc/ex/negate.rb +0 -11
  242. data/doc/ex/negate_channel.rb +0 -9
  243. data/doc/ex/nested_rvg.rb +0 -21
  244. data/doc/ex/nonzero.rb +0 -42
  245. data/doc/ex/normalize.rb +0 -11
  246. data/doc/ex/oil_paint.rb +0 -11
  247. data/doc/ex/opacity.rb +0 -37
  248. data/doc/ex/ordered_dither.rb +0 -11
  249. data/doc/ex/path.rb +0 -63
  250. data/doc/ex/pattern1.rb +0 -25
  251. data/doc/ex/pattern2.rb +0 -26
  252. data/doc/ex/polaroid.rb +0 -26
  253. data/doc/ex/polygon.rb +0 -23
  254. data/doc/ex/polygon01.rb +0 -21
  255. data/doc/ex/polyline.rb +0 -22
  256. data/doc/ex/polyline01.rb +0 -21
  257. data/doc/ex/posterize.rb +0 -8
  258. data/doc/ex/preview.rb +0 -8
  259. data/doc/ex/qbezierpath.rb +0 -52
  260. data/doc/ex/quad01.rb +0 -34
  261. data/doc/ex/quantize-m.rb +0 -25
  262. data/doc/ex/radial_blur.rb +0 -9
  263. data/doc/ex/raise.rb +0 -8
  264. data/doc/ex/random_threshold_channel.rb +0 -13
  265. data/doc/ex/rect01.rb +0 -14
  266. data/doc/ex/rect02.rb +0 -20
  267. data/doc/ex/rectangle.rb +0 -34
  268. data/doc/ex/reduce_noise.rb +0 -28
  269. data/doc/ex/remap.rb +0 -11
  270. data/doc/ex/remap_images.rb +0 -19
  271. data/doc/ex/resize_to_fill.rb +0 -8
  272. data/doc/ex/resize_to_fit.rb +0 -8
  273. data/doc/ex/roll.rb +0 -9
  274. data/doc/ex/rotate.rb +0 -44
  275. data/doc/ex/rotate_f.rb +0 -14
  276. data/doc/ex/roundrect.rb +0 -33
  277. data/doc/ex/rubyname.rb +0 -30
  278. data/doc/ex/rvg_clippath.rb +0 -12
  279. data/doc/ex/rvg_linecap.rb +0 -42
  280. data/doc/ex/rvg_linejoin.rb +0 -40
  281. data/doc/ex/rvg_opacity.rb +0 -18
  282. data/doc/ex/rvg_pattern.rb +0 -26
  283. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  284. data/doc/ex/segment.rb +0 -11
  285. data/doc/ex/sepiatone.rb +0 -7
  286. data/doc/ex/shade.rb +0 -11
  287. data/doc/ex/shadow.rb +0 -30
  288. data/doc/ex/shave.rb +0 -15
  289. data/doc/ex/shear.rb +0 -10
  290. data/doc/ex/sketch.rb +0 -17
  291. data/doc/ex/skewx.rb +0 -51
  292. data/doc/ex/skewy.rb +0 -47
  293. data/doc/ex/smile.rb +0 -126
  294. data/doc/ex/solarize.rb +0 -11
  295. data/doc/ex/sparse_color.rb +0 -55
  296. data/doc/ex/splice.rb +0 -8
  297. data/doc/ex/spread.rb +0 -11
  298. data/doc/ex/stegano.rb +0 -54
  299. data/doc/ex/stroke_dasharray.rb +0 -42
  300. data/doc/ex/stroke_fill.rb +0 -10
  301. data/doc/ex/stroke_linecap.rb +0 -44
  302. data/doc/ex/stroke_linejoin.rb +0 -48
  303. data/doc/ex/stroke_width.rb +0 -49
  304. data/doc/ex/swirl.rb +0 -17
  305. data/doc/ex/text.rb +0 -37
  306. data/doc/ex/text01.rb +0 -16
  307. data/doc/ex/text_align.rb +0 -36
  308. data/doc/ex/text_antialias.rb +0 -37
  309. data/doc/ex/text_styles.rb +0 -19
  310. data/doc/ex/text_undercolor.rb +0 -28
  311. data/doc/ex/texture_fill_to_border.rb +0 -34
  312. data/doc/ex/texture_floodfill.rb +0 -32
  313. data/doc/ex/texturefill.rb +0 -24
  314. data/doc/ex/threshold.rb +0 -13
  315. data/doc/ex/to_blob.rb +0 -13
  316. data/doc/ex/translate.rb +0 -39
  317. data/doc/ex/transparent.rb +0 -38
  318. data/doc/ex/transpose.rb +0 -9
  319. data/doc/ex/transverse.rb +0 -9
  320. data/doc/ex/tref01.rb +0 -24
  321. data/doc/ex/triangle01.rb +0 -15
  322. data/doc/ex/trim.rb +0 -23
  323. data/doc/ex/tspan01.rb +0 -17
  324. data/doc/ex/tspan02.rb +0 -17
  325. data/doc/ex/tspan03.rb +0 -19
  326. data/doc/ex/unsharp_mask.rb +0 -28
  327. data/doc/ex/viewex.rb +0 -33
  328. data/doc/ex/vignette.rb +0 -12
  329. data/doc/ex/watermark.rb +0 -27
  330. data/doc/ex/wave.rb +0 -9
  331. data/doc/ex/wet_floor.rb +0 -58
  332. data/doc/ex/writing_mode01.rb +0 -26
  333. data/doc/ex/writing_mode02.rb +0 -26
  334. data/doc/ilist.html +0 -2056
  335. data/doc/image1.html +0 -4680
  336. data/doc/image2.html +0 -3665
  337. data/doc/image3.html +0 -4522
  338. data/doc/imageattrs.html +0 -1638
  339. data/doc/imusage.html +0 -514
  340. data/doc/index.html +0 -416
  341. data/doc/info.html +0 -1499
  342. data/doc/magick.html +0 -570
  343. data/doc/optequiv.html +0 -2435
  344. data/doc/rvg.html +0 -975
  345. data/doc/rvgclip.html +0 -248
  346. data/doc/rvggroup.html +0 -305
  347. data/doc/rvgimage.html +0 -289
  348. data/doc/rvgpattern.html +0 -475
  349. data/doc/rvgshape.html +0 -406
  350. data/doc/rvgstyle.html +0 -270
  351. data/doc/rvgtext.html +0 -465
  352. data/doc/rvgtspan.html +0 -238
  353. data/doc/rvgtut.html +0 -530
  354. data/doc/rvguse.html +0 -145
  355. data/doc/rvgxform.html +0 -294
  356. data/doc/scripts/doc.js +0 -22
  357. data/doc/scripts/stripeTables.js +0 -23
  358. data/doc/struct.html +0 -1339
  359. data/doc/usage.html +0 -1621
  360. data/examples/constitute.rb +0 -7
  361. data/examples/crop_with_gravity.rb +0 -43
  362. data/examples/demo.rb +0 -323
  363. data/examples/describe.rb +0 -41
  364. data/examples/find_similar_region.rb +0 -34
  365. data/examples/histogram.rb +0 -312
  366. data/examples/identify.rb +0 -174
  367. data/examples/image_opacity.rb +0 -28
  368. data/examples/import_export.rb +0 -31
  369. data/examples/pattern_fill.rb +0 -37
  370. data/examples/rotating_text.rb +0 -45
  371. data/examples/spinner.rb +0 -49
  372. data/examples/thumbnail.rb +0 -64
  373. data/examples/vignette.rb +0 -78
  374. data/spec/rmagick/ImageList1_spec.rb +0 -24
  375. data/spec/rmagick/draw_spec.rb +0 -155
  376. data/spec/rmagick/image/blue_shift_spec.rb +0 -14
  377. data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
  378. data/spec/rmagick/image/composite_spec.rb +0 -72
  379. data/spec/rmagick/image/constitute_spec.rb +0 -13
  380. data/spec/rmagick/image/dispatch_spec.rb +0 -16
  381. data/spec/rmagick/image/dissolve_spec.rb +0 -54
  382. data/spec/rmagick/image/from_blob_spec.rb +0 -12
  383. data/spec/rmagick/image/ping_spec.rb +0 -12
  384. data/spec/rmagick/image/properties_spec.rb +0 -27
  385. data/spec/rmagick/image/read_spec.rb +0 -28
  386. data/spec/spec_helper.rb +0 -9
  387. data/spec/support/issue_200/app.rb +0 -8
  388. data/test/Draw.rb +0 -351
  389. data/test/Enum.rb +0 -228
  390. data/test/Fill.rb +0 -93
  391. data/test/Image1.rb +0 -606
  392. data/test/Image2.rb +0 -1408
  393. data/test/Image3.rb +0 -1086
  394. data/test/ImageList1.rb +0 -858
  395. data/test/ImageList2.rb +0 -375
  396. data/test/Image_attributes.rb +0 -635
  397. data/test/Import_Export.rb +0 -111
  398. data/test/Info.rb +0 -436
  399. data/test/KernelInfo.rb +0 -59
  400. data/test/Magick.rb +0 -311
  401. data/test/Pixel.rb +0 -259
  402. data/test/PolaroidOptions.rb +0 -23
  403. data/test/Preview.rb +0 -26
  404. data/test/Struct.rb +0 -45
  405. data/test/appearance/Montage.rb +0 -26
  406. data/test/appearance/appearance_assertion.rb +0 -13
  407. data/test/appearance/expected/montage_border_color.jpg +0 -0
  408. data/test/cmyk.icm +0 -0
  409. data/test/lib/internal/Draw.rb +0 -811
  410. data/test/lib/internal/Geometry.rb +0 -98
  411. data/test/lib/internal/Magick.rb +0 -40
  412. data/test/srgb.icm +0 -0
  413. data/test/test_all_basic.rb +0 -49
  414. data/test/tmpnam_test.rb +0 -50
@@ -1,28 +0,0 @@
1
- # Ccreate a semi-transparent title for an image.
2
-
3
- require 'rmagick'
4
- include Magick
5
-
6
- puts <<END_INFO
7
-
8
- This example uses a semi-transparent background color to create a title.
9
- View the resulting image by entering the command: display image_opacity.miff
10
-
11
- END_INFO
12
-
13
- balloons = Image.read('../doc/ex/images/Hot_Air_Balloons_H.jpg').first
14
- legend = Image.new(160, 50) { self.background_color = '#ffffffc0' }
15
-
16
- gc = Draw.new
17
- gc.annotate(legend, 0, 0, 0, 0, 'Balloon Day!\\nFri May 2 2003') do
18
- self.gravity = CenterGravity
19
- self.stroke = 'transparent'
20
- self.fill = 'white'
21
- self.pointsize = 18
22
- end
23
-
24
- result = balloons.composite(legend, SouthGravity, OverCompositeOp)
25
-
26
- puts '...Writing image_opacity.png'
27
- result.write 'image_opacity.png'
28
- exit
@@ -1,31 +0,0 @@
1
- #
2
- # Demonstrate the export_pixels and import_pixels methods.
3
- #
4
-
5
- require 'rmagick'
6
- include Magick
7
-
8
- puts <<END_INFO
9
-
10
- This example demonstrates the export_pixels and import_pixels methods
11
- by copying an image one row at a time. The result is an copy that
12
- is identical to the original.
13
-
14
- END_INFO
15
-
16
- img = Image.read('../doc/ex/images/Gold_Statue.jpg').first
17
- copy = Image.new(img.columns, img.rows)
18
-
19
- begin
20
- img.rows.times do |r|
21
- scanline = img.export_pixels(0, r, img.columns, 1, 'RGB')
22
- copy.import_pixels(0, r, img.columns, 1, 'RGB', scanline)
23
- end
24
- rescue NotImplementedError
25
- warn 'The export_pixels and import_pixels methods are not supported' \
26
- ' by this version of ImageMagick/GraphicsMagick'
27
- exit
28
- end
29
-
30
- copy.write('copy.gif')
31
- exit
@@ -1,37 +0,0 @@
1
- # Demonstrate ImageMagick's new (5.5.7-3 and later) built-in patterns.
2
- # Create a Fill class that can be reused to fill in new Image backgrounds.
3
-
4
- # Usage: pattern_fill.rb <name-of-pattern>
5
- # Try 'checkerboard' or 'verticalsaw'
6
-
7
- require 'rmagick'
8
- include Magick
9
-
10
- puts <<END_INFO
11
-
12
- This example demonstrates the PATTERN: image format, which is
13
- new in ImageMagick 5.5.7. Specify the name of any of the
14
- supported patterns as an argument. For example, try "checkerboard".
15
-
16
- END_INFO
17
-
18
- class PatternFill < Magick::TextureFill
19
- def initialize(name = 'bricks')
20
- @pat_img = Magick::Image.read("pattern:#{name}").first
21
- super(@pat_img)
22
- end
23
- end
24
-
25
- if ARGV[0]
26
- pattern = ARGV[0]
27
- else
28
- warn 'Defaulting to checkerboard pattern.'
29
- pattern = 'checkerboard'
30
- end
31
-
32
- # Create a sample image that is 100x bigger than the pattern.
33
- attrs = Image.ping("pattern:#{pattern}").first
34
-
35
- tryit = Image.new(10 * attrs.columns, 10 * attrs.rows, PatternFill.new(pattern))
36
- tryit.write('pattern_fill.gif')
37
- exit
@@ -1,45 +0,0 @@
1
- # Demonstrate the Draw#rotation= method by producing
2
- # an animated MIFF file showing a rotating text string.
3
-
4
- require 'rmagick'
5
- include Magick
6
-
7
- puts <<END_INFO
8
- Demonstrate the rotation= attribute in the Draw class
9
- by producing an animated image. View the output image
10
- by entering the command: animate rotating_text.miff
11
- END_INFO
12
-
13
- text = Draw.new
14
- text.pointsize = 28
15
- text.font_weight = BoldWeight
16
- text.font_style = ItalicStyle
17
- text.gravity = CenterGravity
18
- text.fill = 'white'
19
-
20
- # Let's make it interesting. Composite the
21
- # rotated text over a gradient fill background.
22
- fill = GradientFill.new(100, 100, 100, 100, 'yellow', 'red')
23
- bg = Image.new(200, 200, fill)
24
-
25
- # The "none" color is transparent.
26
- fg = Image.new(bg.columns, bg.rows) { self.background_color = 'none' }
27
-
28
- # Here's where we'll collect the individual frames.
29
- animation = ImageList.new
30
-
31
- 0.step(345, 15) do |degrees|
32
- frame = fg.copy
33
- text.annotate(frame, 0, 0, 0, 0, 'Rotating Text') do
34
- self.rotation = degrees
35
- end
36
- # Composite the text over the gradient filled background frame.
37
- animation << bg.composite(frame, CenterGravity, DisplaceCompositeOp)
38
- end
39
-
40
- animation.delay = 8
41
-
42
- # animation.animate
43
- puts '...Writing rotating_text.gif'
44
- animation.write('rotating_text.gif')
45
- exit
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 CopyAlphaCompositeOp 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.alpha(Magick::ActivateAlphaChannel) # Ensure the ballerina image's opacity channel is enabled.
55
- oval.alpha(Magick::DeactivateAlphaChannel) # Force the CopyAlphaCompositeOp to use pixel intensity
56
- # to determine how much transparency to add to the ballerina
57
- # pixels.
58
-
59
- ballerina = ballerina.composite(oval, CenterGravity, CopyAlphaCompositeOp)
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.write('vignette.png')
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 = described_class.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 = described_class.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,155 +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) { described_class.new }
9
-
10
- describe '._dummy_img_' do
11
- it 'works' do
12
- # initially this variable is not defined.
13
- expect { described_class._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 = described_class._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 = described_class._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
- granite = Magick::Image.read('granite:').first
85
- s = granite.to_blob { self.format = 'miff' }
86
- granite = Magick::Image.from_blob(s).first
87
- blue_stroke = Magick::Image.new(20, 20) { self.background_color = 'blue' }
88
- s = blue_stroke.to_blob { self.format = 'miff' }
89
- blue_stroke = Magick::Image.from_blob(s).first
90
-
91
- draw.affine = Magick::AffineMatrix.new(1, 2, 3, 4, 5, 6)
92
- draw.decorate = Magick::LineThroughDecoration
93
- draw.encoding = 'AdobeCustom'
94
- draw.gravity = Magick::CenterGravity
95
- draw.fill = Magick::Pixel.from_color('red')
96
- draw.stroke = Magick::Pixel.from_color('blue')
97
- draw.stroke_width = 5
98
- draw.fill_pattern = granite
99
- draw.stroke_pattern = blue_stroke
100
- draw.text_antialias = true
101
- draw.font = 'Arial-Bold'
102
- draw.font_family = 'arial'
103
- draw.font_style = Magick::ItalicStyle
104
- draw.font_stretch = Magick::CondensedStretch
105
- draw.font_weight = Magick::BoldWeight
106
- draw.pointsize = 12
107
- draw.density = '72x72'
108
- draw.align = Magick::CenterAlign
109
- draw.undercolor = Magick::Pixel.from_color('green')
110
- draw.kerning = 10.5
111
- draw.interword_spacing = 3.75
112
-
113
- draw.circle(20, 25, 20, 28)
114
- dumped = nil
115
- expect { dumped = Marshal.dump(draw) }.not_to raise_error
116
- expect { Marshal.load(dumped) }.not_to raise_error
117
- end
118
- end
119
-
120
- describe '#fill_pattern' do
121
- it 'accepts an Image argument' do
122
- img = Magick::Image.new(20, 20)
123
- expect { draw.fill_pattern = img }.not_to raise_error
124
- end
125
-
126
- it 'accepts an ImageList argument' do
127
- img = Magick::Image.new(20, 20)
128
- ilist = Magick::ImageList.new
129
- ilist << img
130
- expect { draw.fill_pattern = ilist }.not_to raise_error
131
- end
132
-
133
- it 'does not accept arbitrary arguments' do
134
- expect { draw.fill_pattern = 1 }.to raise_error(NoMethodError)
135
- end
136
- end
137
-
138
- describe '#stroke_pattern' do
139
- it 'accepts an Image argument' do
140
- img = Magick::Image.new(20, 20)
141
- expect { draw.stroke_pattern = img }.not_to raise_error
142
- end
143
-
144
- it 'accepts an ImageList argument' do
145
- img = Magick::Image.new(20, 20)
146
- ilist = Magick::ImageList.new
147
- ilist << img
148
- expect { draw.stroke_pattern = ilist }.not_to raise_error
149
- end
150
-
151
- it 'does not accept arbitrary arguments' do
152
- expect { draw.stroke_pattern = 1 }.to raise_error(NoMethodError)
153
- end
154
- end
155
- end