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