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
@@ -1,321 +0,0 @@
1
- # This routine needs the color_histogram method
2
- # from either ImageMagick 6.0.0 or GraphicsMagick 1.1
3
- # Specify an image filename as an argument.
4
-
5
- require 'rmagick'
6
-
7
- class PixelColumn < Array
8
- def initialize(size)
9
- super
10
- fill {Magick::Pixel.new}
11
- end
12
-
13
- def reset(bg)
14
- each {|pixel| pixel.reset(bg)}
15
- end
16
- end
17
-
18
- module Magick
19
- class Pixel
20
- def reset(bg)
21
- self.red = bg.red
22
- self.green = bg.green
23
- self.blue = bg.blue
24
- self.opacity = bg.opacity
25
- end
26
- end
27
-
28
- class Image
29
- private
30
-
31
- HISTOGRAM_COLS = 256
32
- HISTOGRAM_ROWS = 200
33
- MAX_QUANTUM = 255
34
- AIR_FACTOR = 1.025
35
-
36
- # The alpha frequencies are shown as white dots.
37
- def alpha_hist(freqs, scale, fg, bg)
38
- histogram = Image.new(HISTOGRAM_COLS, HISTOGRAM_ROWS) do
39
- self.background_color = bg
40
- self.border_color = fg
41
- end
42
-
43
- gc = Draw.new
44
- gc.affine(1, 0, 0, -scale, 0, HISTOGRAM_ROWS)
45
- gc.fill('white')
46
-
47
- HISTOGRAM_COLS.times do |x|
48
- gc.point(x, freqs[x])
49
- end
50
-
51
- gc.draw(histogram)
52
- histogram['Label'] = 'Alpha'
53
-
54
- histogram
55
- end
56
-
57
- def channel_histograms(red, green, blue, int, scale, fg, bg)
58
- rgb_histogram = Image.new(HISTOGRAM_COLS, HISTOGRAM_ROWS) do
59
- self.background_color = bg
60
- self.border_color = fg
61
- end
62
- rgb_histogram['Label'] = 'RGB'
63
- red_histogram = rgb_histogram.copy
64
- red_histogram['Label'] = 'Red'
65
- green_histogram = rgb_histogram.copy
66
- green_histogram['Label'] = 'Green'
67
- blue_histogram = rgb_histogram.copy
68
- blue_histogram['Label'] = 'Blue'
69
- int_histogram = rgb_histogram.copy
70
- int_histogram['Label'] = 'Intensity'
71
- int_histogram.matte = true
72
-
73
- rgb_column = PixelColumn.new(HISTOGRAM_ROWS)
74
- red_column = PixelColumn.new(HISTOGRAM_ROWS)
75
- green_column = PixelColumn.new(HISTOGRAM_ROWS)
76
- blue_column = PixelColumn.new(HISTOGRAM_ROWS)
77
- int_column = PixelColumn.new(HISTOGRAM_ROWS)
78
-
79
- HISTOGRAM_COLS.times do |x|
80
- HISTOGRAM_ROWS.times do |y|
81
- yf = Float(y)
82
- if yf >= HISTOGRAM_ROWS - (red[x] * scale)
83
- red_column[y].red = QuantumRange
84
- red_column[y].green = 0
85
- red_column[y].blue = 0
86
- rgb_column[y].red = QuantumRange
87
- end
88
- if yf >= HISTOGRAM_ROWS - (green[x] * scale)
89
- green_column[y].green = QuantumRange
90
- green_column[y].red = 0
91
- green_column[y].blue = 0
92
- rgb_column[y].green = QuantumRange
93
- end
94
- if yf >= HISTOGRAM_ROWS - (blue[x] * scale)
95
- blue_column[y].blue = QuantumRange
96
- blue_column[y].red = 0
97
- blue_column[y].green = 0
98
- rgb_column[y].blue = QuantumRange
99
- end
100
- if yf >= HISTOGRAM_ROWS - (int[x] * scale)
101
- int_column[y].opacity = TransparentOpacity
102
- end
103
- end
104
-
105
- rgb_histogram.store_pixels( x, 0, 1, HISTOGRAM_ROWS, rgb_column)
106
- red_histogram.store_pixels( x, 0, 1, HISTOGRAM_ROWS, red_column)
107
- green_histogram.store_pixels(x, 0, 1, HISTOGRAM_ROWS, green_column)
108
- blue_histogram.store_pixels( x, 0, 1, HISTOGRAM_ROWS, blue_column)
109
- int_histogram.store_pixels( x, 0, 1, HISTOGRAM_ROWS, int_column)
110
- rgb_column.reset(bg)
111
- red_column.reset(bg)
112
- green_column.reset(bg)
113
- blue_column.reset(bg)
114
- int_column.reset(bg)
115
- end
116
-
117
- [red_histogram, green_histogram, blue_histogram, rgb_histogram, int_histogram]
118
- end
119
-
120
- # Make the color histogram. Quantize the image to 256 colors if necessary.
121
- def color_hist(fg, bg)
122
- img = number_colors > 256 ? quantize(256) : self
123
-
124
- begin
125
- hist = img.color_histogram
126
- rescue NotImplementedError
127
- $stderr.puts 'The color_histogram method is not supported by this version '\
128
- 'of ImageMagick/GraphicsMagick'
129
-
130
- else
131
- pixels = hist.keys.sort_by {|pixel| hist[pixel] }
132
- scale = HISTOGRAM_ROWS / (hist.values.max*AIR_FACTOR)
133
-
134
- histogram = Image.new(HISTOGRAM_COLS, HISTOGRAM_ROWS) do
135
- self.background_color = bg
136
- self.border_color = fg
137
- end
138
-
139
- x = 0
140
- pixels.each do |pixel|
141
- column = Array.new(HISTOGRAM_ROWS).fill {Pixel.new}
142
- HISTOGRAM_ROWS.times do |y|
143
- if y >= HISTOGRAM_ROWS - (hist[pixel] * scale)
144
- column[y] = pixel
145
- end
146
- end
147
- histogram.store_pixels(x, 0, 1, HISTOGRAM_ROWS, column)
148
- x = x.succ
149
- end
150
-
151
- histogram['Label'] = 'Color Frequency'
152
- return histogram
153
- end
154
- end
155
-
156
- # Use AnnotateImage to write the stats.
157
- def info_text(fg, bg)
158
- klass = class_type == DirectClass ? 'DirectClass' : 'PsuedoClass'
159
-
160
- text = <<-END_TEXT
161
- Format: #{format}
162
- Geometry: #{columns}x#{rows}
163
- Class: #{klass}
164
- Depth: #{depth} bits-per-pixel component
165
- Colors: #{number_colors}
166
- END_TEXT
167
-
168
- info = Image.new(HISTOGRAM_COLS, HISTOGRAM_ROWS) do
169
- self.background_color = bg
170
- self.border_color = fg
171
- end
172
-
173
- gc = Draw.new
174
-
175
- gc.annotate(info, 0, 0, 0, 0, text) do
176
- self.stroke = 'transparent'
177
- self.fill = fg
178
- self.gravity = CenterGravity
179
- end
180
- info['Label'] = 'Info'
181
-
182
- info
183
- end
184
-
185
- def intensity_hist(int_histogram)
186
- gradient = (Image.read('gradient:#ffff80-#ff9000') { self.size="#{HISTOGRAM_COLS}x#{HISTOGRAM_ROWS}" }).first
187
- int_histogram = gradient.composite(int_histogram, CenterGravity, OverCompositeOp)
188
-
189
- int_histogram['Label'] = 'Intensity'
190
-
191
- int_histogram
192
- end
193
-
194
- # Returns a value between 0 and MAX_QUANTUM. Same as the PixelIntensity macro.
195
- def pixel_intensity(pixel)
196
- (306*(pixel.red & MAX_QUANTUM) + 601*(pixel.green & MAX_QUANTUM) + 117*(pixel.blue & MAX_QUANTUM))/1024
197
- end
198
-
199
- public
200
-
201
- # Create the histogram montage.
202
- def histogram(fg='white', bg='black')
203
- red = Array.new(HISTOGRAM_COLS, 0)
204
- green = Array.new(HISTOGRAM_COLS, 0)
205
- blue = Array.new(HISTOGRAM_COLS, 0)
206
- alpha = Array.new(HISTOGRAM_COLS, 0)
207
- int = Array.new(HISTOGRAM_COLS, 0)
208
-
209
- rows.times do |row|
210
- pixels = get_pixels(0, row, columns, 1)
211
- pixels.each do |pixel|
212
- red[pixel.red & MAX_QUANTUM] += 1
213
- green[pixel.green & MAX_QUANTUM] += 1
214
- blue[pixel.blue & MAX_QUANTUM] += 1
215
-
216
- # Only count opacity channel if some pixels are not opaque.
217
- unless opaque?
218
- alpha[pixel.opacity & MAX_QUANTUM] += 1
219
- end
220
- v = pixel_intensity(pixel)
221
- int[v] += 1
222
- end
223
- end
224
-
225
- # Scale to chart size. When computing the scale, add some "air" between
226
- # the max frequency and the top of the histogram. This makes a prettier chart.
227
- # The RGBA and intensity histograms are all drawn to the same scale.
228
-
229
- max = [red.max, green.max, blue.max, alpha.max, int.max].max
230
- scale = HISTOGRAM_ROWS / (max*AIR_FACTOR)
231
-
232
- charts = ImageList.new
233
-
234
- # Add the thumbnail.
235
- thumb = copy
236
- thumb['Label'] = File.basename(filename)
237
- charts << thumb
238
-
239
- # Compute the channel and intensity histograms.
240
- channel_hists = channel_histograms(red, green, blue, int, scale, fg, bg)
241
-
242
- # Add the red, green, and blue histograms to the list
243
- charts << channel_hists.shift
244
- charts << channel_hists.shift
245
- charts << channel_hists.shift
246
-
247
- # Add Alpha channel or image stats
248
- if !opaque?
249
- charts << alpha_hist(alpha, scale, fg, bg)
250
- else
251
- charts << info_text(fg, bg)
252
- end
253
-
254
- # Add the RGB histogram
255
- charts << channel_hists.shift
256
-
257
- # Add the intensity histogram.
258
- charts << intensity_hist(channel_hists.shift)
259
-
260
- # Add the color frequency histogram.
261
- charts << color_hist(fg, bg)
262
-
263
- # Make a montage.
264
- histogram = charts.montage do
265
- self.background_color = bg
266
- self.stroke = 'transparent'
267
- self.fill = fg
268
- self.border_width = 1
269
- self.tile = '4x2'
270
- self.geometry = "#{HISTOGRAM_COLS}x#{HISTOGRAM_ROWS}+10+10"
271
- end
272
-
273
- histogram
274
- end
275
- end
276
- end
277
-
278
- puts <<END_INFO
279
-
280
- This example shows how to get pixel-level access to an image.
281
- Usage: histogram.rb <image-filename>
282
-
283
- END_INFO
284
-
285
- # Get filename from command line.
286
- if !ARGV[0]
287
- puts 'No filename argument. Defaulting to Flower_Hat.jpg'
288
- filename = '../doc/ex/images/Flower_Hat.jpg'
289
- else
290
- filename = ARGV[0]
291
- end
292
-
293
- # Only process first frame if multi-frame image
294
- image = Magick::Image.read(filename)
295
- if image.length > 1
296
- puts 'Charting 1st image'
297
- end
298
- image = image.first
299
-
300
- # Give the user something to look at while we're working.
301
- name = File.basename(filename).sub(/\..*?$/,'')
302
- $defout.sync = true
303
- printf "Creating #{name}_Histogram.miff"
304
-
305
- timer = Thread.new do
306
- loop do
307
- sleep(1)
308
- printf '.'
309
- end
310
- end
311
-
312
- # Generate the histograms
313
- histogram = image.histogram(Magick::Pixel.from_color('white'), Magick::Pixel.from_color('black'))
314
-
315
- # Write output file
316
- histogram.compression = Magick::ZipCompression
317
- histogram.write("./#{name}_Histogram.miff")
318
-
319
- Thread.kill(timer)
320
- puts 'Done!'
321
- exit
data/examples/identify.rb DELETED
@@ -1,185 +0,0 @@
1
- require 'rmagick'
2
-
3
- module Magick
4
- class Image
5
- # Print information similar to the identify -verbose command
6
- def identify
7
- printf 'Image: '
8
- puts "#{base_filename}=>" if base_filename != filename
9
- puts filename + "\n"
10
- puts "\tFormat: #{format}\n"
11
- puts "\tGeometry: #{columns}x#{rows}\n"
12
- puts "\tClass: #{class_type}\n"
13
- puts "\tType: #{image_type}\n"
14
- puts "\tEndianess: #{endian}\n"
15
- puts "\tColorspace: #{colorspace}\n"
16
- puts "\tChannelDepth:\n"
17
- color_space = gray? ? Magick::GrayColorspace : colorspace
18
- case color_space
19
- when Magick::RGBColorspace
20
- puts "\t\tRed: #{channel_depth(Magick::RedChannel)}-bits\n"
21
- puts "\t\tGreen: #{channel_depth(Magick::GreenChannel)}-bits\n"
22
- puts "\t\tBlue: #{channel_depth(Magick::BlueChannel)}-bits\n"
23
- puts "\t\tOpacity: #{channel_depth(Magick::OpacityChannel)}-bits\n" if matte
24
- when Magick::CMYKColorspace
25
- puts "\t\tCyan : #{channel_depth(Magick::CyanChannel)}-bits\n"
26
- puts "\t\tMagenta: #{channel_depth(Magick::MagentaChannel)}-bits\n"
27
- puts "\t\tYellow: #{channel_depth(Magick::YellowChannel)}-bits\n"
28
- puts "\t\tBlack: #{channel_depth(Magick::BlackChannel)}-bits\n"
29
- puts "\t\tOpacity: #{channel_depth(Magick::OpacityChannel)}-bits\n" if matte
30
- when Magick::GrayColorspace
31
- puts "\t\tGray: #{channel_depth(Magick::GrayChannel)}-bits\n"
32
- puts "\t\tOpacity: #{channel_depth(Magick::OpacityChannel)}-bits\n" if matte
33
- end
34
- scale = Magick::QuantumRange / (Magick::QuantumRange >> (Magick::MAGICKCORE_QUANTUM_DEPTH-channel_depth))
35
- puts "\tChannel statistics:\n"
36
- case color_space
37
- when Magick::RGBColorspace
38
- puts "\t\tRed:\n"
39
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::RedChannel)[0]/scale, channel_extrema(Magick::RedChannel)[0]/Magick::QuantumRange)
40
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::RedChannel)[1]/scale, channel_extrema(Magick::RedChannel)[1]/Magick::QuantumRange)
41
- puts "\t\t\tMean: " + sprintf("%g (%g)\n", channel_mean(Magick::RedChannel)[0]/scale, channel_mean(Magick::RedChannel)[0]/Magick::QuantumRange)
42
- puts "\t\t\tStandard deviation: " + sprintf("%g (%g)\n", channel_mean(Magick::RedChannel)[1]/scale, channel_mean(Magick::RedChannel)[1]/Magick::QuantumRange)
43
- puts "\t\tGreen:\n"
44
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::GreenChannel)[0]/scale, channel_extrema(Magick::GreenChannel)[0]/Magick::QuantumRange)
45
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::GreenChannel)[1]/scale, channel_extrema(Magick::GreenChannel)[1]/Magick::QuantumRange)
46
- puts "\t\t\tMean: " + sprintf("%g (%g)\n", channel_mean(Magick::GreenChannel)[0]/scale, channel_mean(Magick::GreenChannel)[0]/Magick::QuantumRange)
47
- puts "\t\t\tStandard deviation: " + sprintf("%g (%g)\n", channel_mean(Magick::GreenChannel)[1]/scale, channel_mean(Magick::GreenChannel)[1]/Magick::QuantumRange)
48
- puts "\t\tBlue:\n"
49
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::BlueChannel)[0]/scale, channel_extrema(Magick::BlueChannel)[0]/Magick::QuantumRange)
50
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::BlueChannel)[1]/scale, channel_extrema(Magick::BlueChannel)[1]/Magick::QuantumRange)
51
- puts "\t\t\tMean: " + sprintf("%g (%g)\n", channel_mean(Magick::BlueChannel)[0]/scale, channel_mean(Magick::BlueChannel)[0]/Magick::QuantumRange)
52
- puts "\t\t\tStandard deviation: " + sprintf("%g (%g)\n", channel_mean(Magick::BlueChannel)[1]/scale, channel_mean(Magick::BlueChannel)[1]/Magick::QuantumRange)
53
- when Magick::CMYKColorspace
54
- puts "\t\tCyan:\n"
55
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::CyanChannel)[0]/scale, channel_extrema(Magick::CyanChannel)[0]/Magick::QuantumRange)
56
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::CyanChannel)[1]/scale, channel_extrema(Magick::CyanChannel)[1]/Magick::QuantumRange)
57
- puts "\t\t\tMean: " + sprintf("%g (%g)\n", channel_mean(Magick::CyanChannel)[0]/scale, channel_mean(Magick::CyanChannel)[0]/Magick::QuantumRange)
58
- puts "\t\t\tStandard deviation: " + sprintf("%g (%g)\n", channel_mean(Magick::CyanChannel)[1]/scale, channel_mean(Magick::CyanChannel)[1]/Magick::QuantumRange)
59
- puts "\t\tMagenta:\n"
60
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::MagentaChannel)[0]/scale, channel_extrema(Magick::MagentaChannel)[0]/Magick::QuantumRange)
61
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::MagentaChannel)[1]/scale, channel_extrema(Magick::MagentaChannel)[1]/Magick::QuantumRange)
62
- puts "\t\t\tMean: " + sprintf("%g (%g)\n", channel_mean(Magick::MagentaChannel)[0]/scale, channel_mean(Magick::MagentaChannel)[0]/Magick::QuantumRange)
63
- puts "\t\t\tStandard deviation: " + sprintf("%g (%g)\n", channel_mean(Magick::MagentaChannel)[1]/scale, channel_mean(Magick::MagentaChannel)[1]/Magick::QuantumRange)
64
- puts "\t\tYellow:\n"
65
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::YellowChannel)[0]/scale, channel_extrema(Magick::YellowChannel)[0]/Magick::QuantumRange)
66
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::YellowChannel)[1]/scale, channel_extrema(Magick::YellowChannel)[1]/Magick::QuantumRange)
67
- puts "\t\t\tMean: " + sprintf("%g (%g)\n", channel_mean(Magick::YellowChannel)[0]/scale, channel_mean(Magick::YellowChannel)[0]/Magick::QuantumRange)
68
- puts "\t\t\tStandard deviation: " + sprintf("%g (%g)\n", channel_mean(Magick::YellowChannel)[1]/scale, channel_mean(Magick::YellowChannel)[1]/Magick::QuantumRange)
69
- puts "\t\tBlack:\n"
70
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::BlackChannel)[0]/scale, channel_extrema(Magick::BlackChannel)[0]/Magick::QuantumRange)
71
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::BlackChannel)[1]/scale, channel_extrema(Magick::BlackChannel)[1]/Magick::QuantumRange)
72
- puts "\t\t\tMean: " + sprintf("%g (%g)\n", channel_mean(Magick::BlackChannel)[0]/scale, channel_mean(Magick::BlackChannel)[0]/Magick::QuantumRange)
73
- puts "\t\t\tStandard deviation: " + sprintf("%g (%g)\n", channel_mean(Magick::BlackChannel)[1]/scale, channel_mean(Magick::BlackChannel)[1]/Magick::QuantumRange)
74
- when Magick::GrayColorspace
75
- puts "\t\tGray:\n"
76
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::GrayChannel)[0]/scale, channel_extrema(Magick::GrayChannel)[0]/Magick::QuantumRange)
77
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::GrayChannel)[1]/scale, channel_extrema(Magick::GrayChannel)[1]/Magick::QuantumRange)
78
- puts "\t\t\tMean: " + sprintf("%g (%g)\n", channel_mean(Magick::GrayChannel)[0]/scale, channel_mean(Magick::GrayChannel)[0]/Magick::QuantumRange)
79
- puts "\t\t\tStandard deviation: " + sprintf("%g (%g)\n", channel_mean(Magick::GrayChannel)[1]/scale, channel_mean(Magick::GrayChannel)[1]/Magick::QuantumRange)
80
- end
81
- if matte
82
- puts "\t\tOpacity:\n"
83
- puts "\t\t\tMin: " + sprintf("%u (%g)\n", channel_extrema(Magick::OpacityChannel)[0]/scale, channel_extrema(Magick::OpacityChannel)[0]/Magick::QuantumRange)
84
- puts "\t\t\tMax: " + sprintf("%u (%g)\n", channel_extrema(Magick::OpacityChannel)[1]/scale, channel_extrema(Magick::OpacityChannel)[1]/Magick::QuantumRange)
85
- puts "\t\t\tMean:" + sprintf("%u (%g)\n", channel_mean(Magick::OpacityChannel)[0]/scale, channel_mean(Magick::OpacityChannel)[0]/Magick::QuantumRange)
86
- puts "\t\t\tStandard deviation:" + sprintf("%u (%g)\n", channel_mean(Magick::OpacityChannel)[1]/scale, channel_mean(Magick::OpacityChannel)[1]/Magick::QuantumRange)
87
- end
88
- if class_type == Magick::DirectClass
89
- puts "\tColors: #{total_colors}\n"
90
- else
91
- if total_colors <= colors
92
- puts "\tColors: #{colors}\n"
93
- else
94
- puts "\tColors: #{total_colors}=>#{colors}\n"
95
- end
96
- end
97
- # Histogram goes here
98
- puts "\tMean error per pixel: #{mean_error_per_pixel}\n" if mean_error_per_pixel != 0.0
99
- puts "\tNormalized mean error: #{normalized_mean_error}\n" if normalized_mean_error != 0.0
100
- puts "\tNormalized maximum error: #{normalized_maximum_error}\n" if normalized_maximum_error != 0.0
101
- puts "\tRendering-intent: #{rendering_intent}\n"
102
- puts "\tGamma: #{gamma}\n" if gamma != 0.0
103
- chrom = chromaticity
104
- if chrom.red_primary.x != 0.0 || chrom.green_primary.x != 0.0 || chrom.blue_primary.x != 0.0 || chrom.white_point.x != 0.0
105
- puts "\tChromaticity:\n"
106
- puts "\t\tred primary: (#{sprintf('%g,%g', chrom.red_primary.x, chrom.red_primary.y)})\n"
107
- puts "\t\tgreen primary: (#{sprintf('%g,%g', chrom.green_primary.x, chrom.green_primary.y)})\n"
108
- puts "\t\tblue primary: (#{sprintf('%g,%g', chrom.blue_primary.x, chrom.blue_primary.y)})\n"
109
- puts "\t\twhite point: (#{sprintf('%g,%g', chrom.white_point.x, chrom.white_point.y)})\n"
110
- end
111
- ex_info = extract_info
112
- if ex_info.width * ex_info.height != 0.0
113
- puts "\tTile geometry: #{ex_info.width}x#{ex_info.height}+#{ex_info.x}+#{ex_info.y}\n"
114
- end
115
- if x_resolution != 0.0 && y_resolution != 0.0
116
- puts "\tResolution: #{sprintf('%gx%g', x_resolution, y_resolution)}\n"
117
- end
118
- puts "\tUnits: #{units}\n"
119
- size = filesize
120
- if size >= 1048576
121
- puts "\tFilesize: #{'%.1f' % (size/1048576.0)}mb\n"
122
- elsif size >= 1024
123
- puts "\tFilesize: #{'%.0f' % (size/1024.0)}kb\n"
124
- else
125
- puts "\tFilesize: #{size}b\n"
126
- end
127
- puts "\tInterlace: #{interlace}\n"
128
- puts "\tBackground Color: #{background_color}\n"
129
- puts "\tBorder Color: #{border_color}\n"
130
- puts "\tMatte Color: #{matte_color}\n"
131
- pg = page
132
- if pg.width != 0 || pg.height != 0 || pg.x != 0 || pg.y != 0
133
- puts "\tPage geometry: #{pg.width}x#{pg.height}+#{pg.x}+#{pg.y}\n"
134
- end
135
- puts "\tDispose: #{dispose}\n"
136
- puts "\tDelay: #{delay}\n" if delay != 0
137
- puts "\tIterations: #{iterations}\n" unless iterations == 1
138
- puts "\tScene: #{scene}\n" if scene != 0
139
- puts "\tCompression: #{compression}\n"
140
- puts "\tQuality: #{quality}\n" unless quality == 0
141
- puts "\tOrientation: #{orientation}\n"
142
- puts "\tMontage: #{montage}\n" if montage
143
- signature # compute but ignore - will be displayed along with the other properties
144
- properties.each do |prop, value|
145
- next if prop[0,1] == '['
146
- puts "\t#{prop}: #{value}\n"
147
- end
148
- clip_path = self['8BIM:1999,2998:#1']
149
- if clip_path
150
- puts "\tClipping path: #{clip_path}\n"
151
- end
152
- each_profile do |name, value|
153
- puts "\tProfile-#{name}: #{value.length}\n"
154
- if name == 'exif'
155
- exif_attrs = get_exif_by_entry
156
- exif_attrs.each do |attr|
157
- puts "\t\t#{attr[0]}: #{attr[1]}\n"
158
- end
159
- end
160
- end
161
- puts "\tTainted: True\n" if changed?
162
- puts "\tTainted: False\n" unless changed?
163
- puts "\tVersion: #{Magick::Version}\n"
164
- puts "\t #{Magick::Magick_version}\n"
165
- end
166
- end
167
- end
168
-
169
- if ARGV.length == 0
170
- puts <<-'END_USAGE'
171
- This example displays information about the specified image file(s)
172
- that is similar to ImageMagick/GraphicsMagick's identify command.
173
-
174
- Usage:
175
- ruby identify.rb filename [filename...]
176
- END_USAGE
177
- exit
178
- end
179
-
180
- ilist = Magick::ImageList.new(*ARGV)
181
- ilist.each do |img|
182
- img.identify
183
- end
184
-
185
- exit
@@ -1,29 +0,0 @@
1
-
2
- # Ccreate a semi-transparent title for an image.
3
-
4
- require 'rmagick'
5
- include Magick
6
-
7
- puts <<END_INFO
8
-
9
- This example uses a semi-transparent background color to create a title.
10
- View the resulting image by entering the command: display image_opacity.miff
11
-
12
- END_INFO
13
-
14
- balloons = Image.read('../doc/ex/images/Hot_Air_Balloons_H.jpg').first
15
- legend = Image.new(160, 50) { self.background_color = '#ffffffc0' }
16
-
17
- gc = Draw.new
18
- gc.annotate(legend, 0, 0, 0, 0, 'Balloon Day!\\nFri May 2 2003') do
19
- self.gravity = CenterGravity
20
- self.stroke = 'transparent'
21
- self.fill = 'white'
22
- self.pointsize = 18
23
- end
24
-
25
- result = balloons.composite(legend, SouthGravity, OverCompositeOp)
26
-
27
- puts '...Writing image_opacity.miff'
28
- result.write 'image_opacity.miff'
29
- 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
- $stderr.puts '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,38 +0,0 @@
1
-
2
- # Demonstrate ImageMagick's new (5.5.7-3 and later) built-in patterns.
3
- # Create a Fill class that can be reused to fill in new Image backgrounds.
4
-
5
- # Usage: pattern_fill.rb <name-of-pattern>
6
- # Try 'checkerboard' or 'verticalsaw'
7
-
8
- require 'rmagick'
9
- include Magick
10
-
11
- puts <<END_INFO
12
-
13
- This example demonstrates the PATTERN: image format, which is
14
- new in ImageMagick 5.5.7. Specify the name of any of the
15
- supported patterns as an argument. For example, try "checkerboard".
16
-
17
- END_INFO
18
-
19
- class PatternFill < Magick::TextureFill
20
- def initialize(name='bricks')
21
- @pat_img = Magick::Image.read("pattern:#{name}").first
22
- super(@pat_img)
23
- end
24
- end
25
-
26
- if ARGV[0]
27
- pattern = ARGV[0]
28
- else
29
- $stderr.puts 'Defaulting to checkerboard pattern.'
30
- pattern = 'checkerboard'
31
- end
32
-
33
- # Create a sample image that is 100x bigger than the pattern.
34
- attrs = Image.ping("pattern:#{pattern}").first
35
-
36
- tryit = Image.new(10*attrs.columns, 10*attrs.rows, PatternFill.new(pattern))
37
- tryit.write('pattern_fill.gif')
38
- exit
@@ -1,44 +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
-
19
- # Let's make it interesting. Composite the
20
- # rotated text over a gradient fill background.
21
- fill = GradientFill.new(100,100,100,100,'yellow','red')
22
- bg = Image.new(200, 200, fill)
23
-
24
- # The "none" color is transparent.
25
- fg = Image.new(bg.columns, bg.rows) { self.background_color = 'none' }
26
-
27
- # Here's where we'll collect the individual frames.
28
- animation = ImageList.new
29
-
30
- 0.step(345,15) do |degrees|
31
- frame = fg.copy
32
- text.annotate(frame, 0,0,0,0, 'Rotating Text') do
33
- self.rotation = degrees
34
- end
35
- # Composite the text over the gradient filled background frame.
36
- animation << bg.composite(frame, CenterGravity, DisplaceCompositeOp)
37
- end
38
-
39
- animation.delay = 8
40
-
41
- #animation.animate
42
- puts '...Writing rotating_text.gif'
43
- animation.write('rotating_text.gif')
44
- exit