rmagick 3.2.0 → 4.3.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 (420) hide show
  1. checksums.yaml +4 -4
  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 +3 -1
  12. data/.rspec +1 -0
  13. data/.rubocop.yml +24 -0
  14. data/.rubocop_todo.yml +151 -297
  15. data/.yardopts +5 -0
  16. data/CHANGELOG.md +233 -0
  17. data/CODE_OF_CONDUCT.md +122 -7
  18. data/CONTRIBUTING.md +14 -10
  19. data/README.md +326 -0
  20. data/Rakefile +16 -22
  21. data/before_install_linux.sh +22 -28
  22. data/before_install_osx.sh +57 -2
  23. data/ext/RMagick/extconf.rb +149 -105
  24. data/ext/RMagick/rmagick.c +77 -104
  25. data/ext/RMagick/rmagick.h +121 -103
  26. data/ext/RMagick/rmdraw.c +364 -436
  27. data/ext/RMagick/rmenum.c +106 -114
  28. data/ext/RMagick/rmfill.c +149 -70
  29. data/ext/RMagick/rmilist.c +225 -367
  30. data/ext/RMagick/rmimage.c +4751 -4405
  31. data/ext/RMagick/rminfo.c +574 -787
  32. data/ext/RMagick/rmkinfo.c +51 -121
  33. data/ext/RMagick/rmmain.c +454 -286
  34. data/ext/RMagick/rmmontage.c +64 -130
  35. data/ext/RMagick/rmpixel.c +488 -437
  36. data/ext/RMagick/rmstruct.c +83 -96
  37. data/ext/RMagick/rmutil.c +302 -214
  38. data/lib/rmagick/version.rb +1 -1
  39. data/lib/rmagick_internal.rb +138 -93
  40. data/lib/rvg/clippath.rb +2 -1
  41. data/lib/rvg/container.rb +10 -5
  42. data/lib/rvg/describable.rb +1 -1
  43. data/lib/rvg/embellishable.rb +5 -4
  44. data/lib/rvg/misc.rb +15 -12
  45. data/lib/rvg/paint.rb +2 -1
  46. data/lib/rvg/pathdata.rb +12 -11
  47. data/lib/rvg/rvg.rb +12 -8
  48. data/lib/rvg/stylable.rb +9 -7
  49. data/lib/rvg/text.rb +11 -6
  50. data/lib/rvg/transformable.rb +3 -2
  51. data/lib/rvg/units.rb +1 -1
  52. data/rmagick.gemspec +10 -11
  53. metadata +52 -423
  54. data/.appveyor.yml +0 -45
  55. data/.circleci/config.yml +0 -56
  56. data/.ruby-version +0 -1
  57. data/.simplecov +0 -27
  58. data/.travis.yml +0 -62
  59. data/Doxyfile +0 -1514
  60. data/README.textile +0 -259
  61. data/benchmarks/memory/README.md +0 -50
  62. data/benchmarks/memory/image_new.rb +0 -8
  63. data/benchmarks/memory/rmagick.gnuplot +0 -16
  64. data/doc/.cvsignore +0 -1
  65. data/doc/comtasks.html +0 -287
  66. data/doc/constants.html +0 -1581
  67. data/doc/css/doc.css +0 -299
  68. data/doc/css/popup.css +0 -34
  69. data/doc/css/ref.css +0 -67
  70. data/doc/draw.html +0 -3272
  71. data/doc/ex/InitialCoords.rb +0 -22
  72. data/doc/ex/NewCoordSys.rb +0 -30
  73. data/doc/ex/OrigCoordSys.rb +0 -16
  74. data/doc/ex/PreserveAspectRatio.rb +0 -204
  75. data/doc/ex/RotateScale.rb +0 -36
  76. data/doc/ex/Skew.rb +0 -38
  77. data/doc/ex/Use01.rb +0 -15
  78. data/doc/ex/Use02.rb +0 -20
  79. data/doc/ex/Use03.rb +0 -16
  80. data/doc/ex/ViewBox.rb +0 -31
  81. data/doc/ex/adaptive_threshold.rb +0 -9
  82. data/doc/ex/add_noise.rb +0 -16
  83. data/doc/ex/affine.rb +0 -48
  84. data/doc/ex/affine_transform.rb +0 -20
  85. data/doc/ex/arc.rb +0 -49
  86. data/doc/ex/arcpath.rb +0 -32
  87. data/doc/ex/arcs01.rb +0 -28
  88. data/doc/ex/arcs02.rb +0 -59
  89. data/doc/ex/average.rb +0 -15
  90. data/doc/ex/axes.rb +0 -64
  91. data/doc/ex/baseline_shift01.rb +0 -17
  92. data/doc/ex/bilevel_channel.rb +0 -8
  93. data/doc/ex/blur_image.rb +0 -12
  94. data/doc/ex/border.rb +0 -10
  95. data/doc/ex/bounding_box.rb +0 -42
  96. data/doc/ex/cbezier1.rb +0 -41
  97. data/doc/ex/cbezier2.rb +0 -41
  98. data/doc/ex/cbezier3.rb +0 -41
  99. data/doc/ex/cbezier4.rb +0 -42
  100. data/doc/ex/cbezier5.rb +0 -42
  101. data/doc/ex/cbezier6.rb +0 -53
  102. data/doc/ex/channel.rb +0 -25
  103. data/doc/ex/charcoal.rb +0 -12
  104. data/doc/ex/chop.rb +0 -29
  105. data/doc/ex/circle.rb +0 -33
  106. data/doc/ex/circle01.rb +0 -16
  107. data/doc/ex/clip_path.rb +0 -60
  108. data/doc/ex/coalesce.rb +0 -57
  109. data/doc/ex/color_fill_to_border.rb +0 -29
  110. data/doc/ex/color_floodfill.rb +0 -28
  111. data/doc/ex/color_histogram.rb +0 -47
  112. data/doc/ex/color_reset.rb +0 -11
  113. data/doc/ex/colorize.rb +0 -16
  114. data/doc/ex/colors.rb +0 -64
  115. data/doc/ex/compose_mask.rb +0 -22
  116. data/doc/ex/composite.rb +0 -133
  117. data/doc/ex/composite_layers.rb +0 -52
  118. data/doc/ex/composite_tiled.rb +0 -21
  119. data/doc/ex/contrast.rb +0 -36
  120. data/doc/ex/crop.rb +0 -31
  121. data/doc/ex/crop_with_gravity.rb +0 -42
  122. data/doc/ex/cubic01.rb +0 -43
  123. data/doc/ex/cubic02.rb +0 -91
  124. data/doc/ex/cycle_colormap.rb +0 -21
  125. data/doc/ex/dissolve.rb +0 -12
  126. data/doc/ex/drawcomp.rb +0 -41
  127. data/doc/ex/drop_shadow.rb +0 -60
  128. data/doc/ex/edge.rb +0 -11
  129. data/doc/ex/ellipse.rb +0 -45
  130. data/doc/ex/ellipse01.rb +0 -21
  131. data/doc/ex/emboss.rb +0 -11
  132. data/doc/ex/enhance.rb +0 -28
  133. data/doc/ex/equalize.rb +0 -11
  134. data/doc/ex/evenodd.rb +0 -42
  135. data/doc/ex/fill_pattern.rb +0 -23
  136. data/doc/ex/flatten_images.rb +0 -36
  137. data/doc/ex/flip.rb +0 -11
  138. data/doc/ex/flop.rb +0 -11
  139. data/doc/ex/font_styles.rb +0 -32
  140. data/doc/ex/fonts.rb +0 -16
  141. data/doc/ex/frame.rb +0 -12
  142. data/doc/ex/gaussian_blur.rb +0 -11
  143. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  144. data/doc/ex/get_pixels.rb +0 -45
  145. data/doc/ex/get_type_metrics.rb +0 -142
  146. data/doc/ex/gradientfill.rb +0 -27
  147. data/doc/ex/grav.rb +0 -45
  148. data/doc/ex/gravity.rb +0 -78
  149. data/doc/ex/group.rb +0 -26
  150. data/doc/ex/hatchfill.rb +0 -27
  151. data/doc/ex/image.rb +0 -44
  152. data/doc/ex/images/Apple.miff +0 -0
  153. data/doc/ex/images/Ballerina.jpg +0 -0
  154. data/doc/ex/images/Ballerina3.jpg +0 -0
  155. data/doc/ex/images/Button_0.gif +0 -0
  156. data/doc/ex/images/Button_1.gif +0 -0
  157. data/doc/ex/images/Button_2.gif +0 -0
  158. data/doc/ex/images/Button_3.gif +0 -0
  159. data/doc/ex/images/Button_4.gif +0 -0
  160. data/doc/ex/images/Button_5.gif +0 -0
  161. data/doc/ex/images/Button_6.gif +0 -0
  162. data/doc/ex/images/Button_7.gif +0 -0
  163. data/doc/ex/images/Button_8.gif +0 -0
  164. data/doc/ex/images/Button_9.gif +0 -0
  165. data/doc/ex/images/Button_A.gif +0 -0
  166. data/doc/ex/images/Button_B.gif +0 -0
  167. data/doc/ex/images/Button_C.gif +0 -0
  168. data/doc/ex/images/Button_D.gif +0 -0
  169. data/doc/ex/images/Button_E.gif +0 -0
  170. data/doc/ex/images/Button_F.gif +0 -0
  171. data/doc/ex/images/Button_G.gif +0 -0
  172. data/doc/ex/images/Button_H.gif +0 -0
  173. data/doc/ex/images/Button_I.gif +0 -0
  174. data/doc/ex/images/Button_J.gif +0 -0
  175. data/doc/ex/images/Button_K.gif +0 -0
  176. data/doc/ex/images/Button_L.gif +0 -0
  177. data/doc/ex/images/Button_M.gif +0 -0
  178. data/doc/ex/images/Button_N.gif +0 -0
  179. data/doc/ex/images/Button_O.gif +0 -0
  180. data/doc/ex/images/Button_P.gif +0 -0
  181. data/doc/ex/images/Button_Q.gif +0 -0
  182. data/doc/ex/images/Button_R.gif +0 -0
  183. data/doc/ex/images/Button_S.gif +0 -0
  184. data/doc/ex/images/Button_T.gif +0 -0
  185. data/doc/ex/images/Button_U.gif +0 -0
  186. data/doc/ex/images/Button_V.gif +0 -0
  187. data/doc/ex/images/Button_W.gif +0 -0
  188. data/doc/ex/images/Button_X.gif +0 -0
  189. data/doc/ex/images/Button_Y.gif +0 -0
  190. data/doc/ex/images/Button_Z.gif +0 -0
  191. data/doc/ex/images/Cheetah.jpg +0 -0
  192. data/doc/ex/images/Coffee.png +0 -0
  193. data/doc/ex/images/Flower_Hat.jpg +0 -0
  194. data/doc/ex/images/Gold_Statue.jpg +0 -0
  195. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  196. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  197. data/doc/ex/images/Leaf.miff +0 -0
  198. data/doc/ex/images/No.png +0 -0
  199. data/doc/ex/images/Polynesia.jpg +0 -0
  200. data/doc/ex/images/Red_Rocks.jpg +0 -0
  201. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  202. data/doc/ex/images/Shorts.jpg +0 -0
  203. data/doc/ex/images/Snake.png +0 -0
  204. data/doc/ex/images/Violin.jpg +0 -0
  205. data/doc/ex/images/Yellow_Rose.miff +0 -0
  206. data/doc/ex/images/big-duck.gif +0 -0
  207. data/doc/ex/images/duck.gif +0 -0
  208. data/doc/ex/images/duck0.gif +0 -0
  209. data/doc/ex/images/duck1.gif +0 -0
  210. data/doc/ex/images/duck10.gif +0 -0
  211. data/doc/ex/images/duck11.gif +0 -0
  212. data/doc/ex/images/duck12.gif +0 -0
  213. data/doc/ex/images/duck13.gif +0 -0
  214. data/doc/ex/images/duck14.gif +0 -0
  215. data/doc/ex/images/duck15.gif +0 -0
  216. data/doc/ex/images/duck2.gif +0 -0
  217. data/doc/ex/images/duck3.gif +0 -0
  218. data/doc/ex/images/duck4.gif +0 -0
  219. data/doc/ex/images/duck5.gif +0 -0
  220. data/doc/ex/images/duck6.gif +0 -0
  221. data/doc/ex/images/duck7.gif +0 -0
  222. data/doc/ex/images/duck8.gif +0 -0
  223. data/doc/ex/images/duck9.gif +0 -0
  224. data/doc/ex/images/graydient230x6.gif +0 -0
  225. data/doc/ex/images/image_with_profile.jpg +0 -0
  226. data/doc/ex/images/logo400x83.gif +0 -0
  227. data/doc/ex/images/model.miff +0 -0
  228. data/doc/ex/images/notimplemented.gif +0 -0
  229. data/doc/ex/images/smile.miff +0 -0
  230. data/doc/ex/images/spin.gif +0 -0
  231. data/doc/ex/implode.rb +0 -34
  232. data/doc/ex/level.rb +0 -11
  233. data/doc/ex/level_colors.rb +0 -11
  234. data/doc/ex/line.rb +0 -41
  235. data/doc/ex/line01.rb +0 -21
  236. data/doc/ex/mask.rb +0 -35
  237. data/doc/ex/matte_fill_to_border.rb +0 -39
  238. data/doc/ex/matte_floodfill.rb +0 -32
  239. data/doc/ex/matte_replace.rb +0 -39
  240. data/doc/ex/median_filter.rb +0 -28
  241. data/doc/ex/modulate.rb +0 -11
  242. data/doc/ex/mono.rb +0 -23
  243. data/doc/ex/morph.rb +0 -25
  244. data/doc/ex/mosaic.rb +0 -37
  245. data/doc/ex/motion_blur.rb +0 -11
  246. data/doc/ex/negate.rb +0 -11
  247. data/doc/ex/negate_channel.rb +0 -9
  248. data/doc/ex/nested_rvg.rb +0 -21
  249. data/doc/ex/nonzero.rb +0 -42
  250. data/doc/ex/normalize.rb +0 -11
  251. data/doc/ex/oil_paint.rb +0 -11
  252. data/doc/ex/opacity.rb +0 -37
  253. data/doc/ex/ordered_dither.rb +0 -11
  254. data/doc/ex/path.rb +0 -63
  255. data/doc/ex/pattern1.rb +0 -25
  256. data/doc/ex/pattern2.rb +0 -26
  257. data/doc/ex/polaroid.rb +0 -26
  258. data/doc/ex/polygon.rb +0 -23
  259. data/doc/ex/polygon01.rb +0 -21
  260. data/doc/ex/polyline.rb +0 -22
  261. data/doc/ex/polyline01.rb +0 -21
  262. data/doc/ex/posterize.rb +0 -8
  263. data/doc/ex/preview.rb +0 -8
  264. data/doc/ex/qbezierpath.rb +0 -52
  265. data/doc/ex/quad01.rb +0 -34
  266. data/doc/ex/quantize-m.rb +0 -25
  267. data/doc/ex/radial_blur.rb +0 -9
  268. data/doc/ex/raise.rb +0 -8
  269. data/doc/ex/random_threshold_channel.rb +0 -13
  270. data/doc/ex/rect01.rb +0 -14
  271. data/doc/ex/rect02.rb +0 -20
  272. data/doc/ex/rectangle.rb +0 -34
  273. data/doc/ex/reduce_noise.rb +0 -28
  274. data/doc/ex/remap.rb +0 -11
  275. data/doc/ex/remap_images.rb +0 -19
  276. data/doc/ex/resize_to_fill.rb +0 -8
  277. data/doc/ex/resize_to_fit.rb +0 -8
  278. data/doc/ex/roll.rb +0 -9
  279. data/doc/ex/rotate.rb +0 -44
  280. data/doc/ex/rotate_f.rb +0 -14
  281. data/doc/ex/roundrect.rb +0 -33
  282. data/doc/ex/rubyname.rb +0 -30
  283. data/doc/ex/rvg_clippath.rb +0 -12
  284. data/doc/ex/rvg_linecap.rb +0 -42
  285. data/doc/ex/rvg_linejoin.rb +0 -40
  286. data/doc/ex/rvg_opacity.rb +0 -18
  287. data/doc/ex/rvg_pattern.rb +0 -26
  288. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  289. data/doc/ex/segment.rb +0 -11
  290. data/doc/ex/sepiatone.rb +0 -7
  291. data/doc/ex/shade.rb +0 -11
  292. data/doc/ex/shadow.rb +0 -30
  293. data/doc/ex/shave.rb +0 -15
  294. data/doc/ex/shear.rb +0 -10
  295. data/doc/ex/sketch.rb +0 -17
  296. data/doc/ex/skewx.rb +0 -51
  297. data/doc/ex/skewy.rb +0 -47
  298. data/doc/ex/smile.rb +0 -126
  299. data/doc/ex/solarize.rb +0 -11
  300. data/doc/ex/sparse_color.rb +0 -55
  301. data/doc/ex/splice.rb +0 -8
  302. data/doc/ex/spread.rb +0 -11
  303. data/doc/ex/stegano.rb +0 -54
  304. data/doc/ex/stroke_dasharray.rb +0 -42
  305. data/doc/ex/stroke_fill.rb +0 -10
  306. data/doc/ex/stroke_linecap.rb +0 -44
  307. data/doc/ex/stroke_linejoin.rb +0 -48
  308. data/doc/ex/stroke_width.rb +0 -49
  309. data/doc/ex/swirl.rb +0 -17
  310. data/doc/ex/text.rb +0 -37
  311. data/doc/ex/text01.rb +0 -16
  312. data/doc/ex/text_align.rb +0 -36
  313. data/doc/ex/text_antialias.rb +0 -37
  314. data/doc/ex/text_styles.rb +0 -19
  315. data/doc/ex/text_undercolor.rb +0 -28
  316. data/doc/ex/texture_fill_to_border.rb +0 -34
  317. data/doc/ex/texture_floodfill.rb +0 -32
  318. data/doc/ex/texturefill.rb +0 -24
  319. data/doc/ex/threshold.rb +0 -13
  320. data/doc/ex/to_blob.rb +0 -13
  321. data/doc/ex/translate.rb +0 -39
  322. data/doc/ex/transparent.rb +0 -38
  323. data/doc/ex/transpose.rb +0 -9
  324. data/doc/ex/transverse.rb +0 -9
  325. data/doc/ex/tref01.rb +0 -24
  326. data/doc/ex/triangle01.rb +0 -15
  327. data/doc/ex/trim.rb +0 -23
  328. data/doc/ex/tspan01.rb +0 -17
  329. data/doc/ex/tspan02.rb +0 -17
  330. data/doc/ex/tspan03.rb +0 -19
  331. data/doc/ex/unsharp_mask.rb +0 -28
  332. data/doc/ex/viewex.rb +0 -33
  333. data/doc/ex/vignette.rb +0 -12
  334. data/doc/ex/watermark.rb +0 -27
  335. data/doc/ex/wave.rb +0 -9
  336. data/doc/ex/wet_floor.rb +0 -58
  337. data/doc/ex/writing_mode01.rb +0 -26
  338. data/doc/ex/writing_mode02.rb +0 -26
  339. data/doc/ilist.html +0 -2056
  340. data/doc/image1.html +0 -4680
  341. data/doc/image2.html +0 -3665
  342. data/doc/image3.html +0 -4522
  343. data/doc/imageattrs.html +0 -1638
  344. data/doc/imusage.html +0 -514
  345. data/doc/index.html +0 -416
  346. data/doc/info.html +0 -1499
  347. data/doc/magick.html +0 -570
  348. data/doc/optequiv.html +0 -2435
  349. data/doc/rvg.html +0 -975
  350. data/doc/rvgclip.html +0 -248
  351. data/doc/rvggroup.html +0 -305
  352. data/doc/rvgimage.html +0 -289
  353. data/doc/rvgpattern.html +0 -475
  354. data/doc/rvgshape.html +0 -406
  355. data/doc/rvgstyle.html +0 -270
  356. data/doc/rvgtext.html +0 -465
  357. data/doc/rvgtspan.html +0 -238
  358. data/doc/rvgtut.html +0 -530
  359. data/doc/rvguse.html +0 -145
  360. data/doc/rvgxform.html +0 -294
  361. data/doc/scripts/doc.js +0 -22
  362. data/doc/scripts/stripeTables.js +0 -23
  363. data/doc/struct.html +0 -1339
  364. data/doc/usage.html +0 -1621
  365. data/examples/constitute.rb +0 -7
  366. data/examples/crop_with_gravity.rb +0 -42
  367. data/examples/demo.rb +0 -323
  368. data/examples/describe.rb +0 -41
  369. data/examples/find_similar_region.rb +0 -34
  370. data/examples/histogram.rb +0 -312
  371. data/examples/identify.rb +0 -174
  372. data/examples/image_opacity.rb +0 -28
  373. data/examples/import_export.rb +0 -31
  374. data/examples/pattern_fill.rb +0 -37
  375. data/examples/rotating_text.rb +0 -45
  376. data/examples/spinner.rb +0 -49
  377. data/examples/thumbnail.rb +0 -64
  378. data/examples/vignette.rb +0 -78
  379. data/lib/obsolete.rb +0 -66
  380. data/spec/rmagick/ImageList1_spec.rb +0 -24
  381. data/spec/rmagick/draw_spec.rb +0 -155
  382. data/spec/rmagick/image/blue_shift_spec.rb +0 -14
  383. data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
  384. data/spec/rmagick/image/composite_spec.rb +0 -72
  385. data/spec/rmagick/image/constitute_spec.rb +0 -13
  386. data/spec/rmagick/image/dispatch_spec.rb +0 -16
  387. data/spec/rmagick/image/from_blob_spec.rb +0 -12
  388. data/spec/rmagick/image/ping_spec.rb +0 -12
  389. data/spec/rmagick/image/properties_spec.rb +0 -27
  390. data/spec/rmagick/image/read_spec.rb +0 -28
  391. data/spec/spec_helper.rb +0 -10
  392. data/spec/support/issue_200/app.rb +0 -8
  393. data/test/Draw.rb +0 -351
  394. data/test/Enum.rb +0 -228
  395. data/test/Fill.rb +0 -93
  396. data/test/Image1.rb +0 -627
  397. data/test/Image2.rb +0 -1426
  398. data/test/Image3.rb +0 -1091
  399. data/test/ImageList1.rb +0 -858
  400. data/test/ImageList2.rb +0 -406
  401. data/test/Image_attributes.rb +0 -666
  402. data/test/Import_Export.rb +0 -115
  403. data/test/Info.rb +0 -444
  404. data/test/KernelInfo.rb +0 -67
  405. data/test/Magick.rb +0 -311
  406. data/test/Pixel.rb +0 -285
  407. data/test/PolaroidOptions.rb +0 -23
  408. data/test/Preview.rb +0 -26
  409. data/test/Struct.rb +0 -45
  410. data/test/appearance/Montage.rb +0 -26
  411. data/test/appearance/appearance_assertion.rb +0 -13
  412. data/test/appearance/expected/montage_border_color.jpg +0 -0
  413. data/test/cmyk.icm +0 -0
  414. data/test/lib/Obsolete.rb +0 -30
  415. data/test/lib/internal/Draw.rb +0 -823
  416. data/test/lib/internal/Geometry.rb +0 -98
  417. data/test/lib/internal/Magick.rb +0 -40
  418. data/test/srgb.icm +0 -0
  419. data/test/test_all_basic.rb +0 -49
  420. data/test/tmpnam_test.rb +0 -50
data/README.textile DELETED
@@ -1,259 +0,0 @@
1
- h1. RMagick
2
-
3
- !https://img.shields.io/gem/v/rmagick.svg?style=flat!:http://rubygems.org/gems/rmagick !https://travis-ci.org/rmagick/rmagick.svg?branch=master!:https://travis-ci.org/rmagick/rmagick !https://ci.appveyor.com/api/projects/status/xw3usp6s1ghfimb4/branch/master?svg=true!:https://ci.appveyor.com/project/mockdeep/rmagick !https://circleci.com/gh/rmagick/rmagick.svg?style=svg!:https://circleci.com/gh/rmagick/rmagick
4
-
5
- h3. Table of Contents
6
-
7
- * "Introduction":#intro
8
- * "Prerequisites":#prereq
9
- * "Installing RMagick":#install
10
- * "Things that can go wrong":#wrong
11
- * "Upgrading":#upgrade
12
- * "More samples":#samples
13
- * "Reporting Bugs":#bugs
14
- * "Development Setup":#dev-setup
15
- * "Contact Information":#contact
16
- * "Credits":#credits
17
- * "License":#license
18
- * "Releasing":#releasing
19
-
20
- h2(#intro). Introduction
21
-
22
- RMagick is an interface between the Ruby programming language and the
23
- ImageMagick image processing library.
24
-
25
- h2(#prereq). Prerequisites
26
-
27
- These prerequisites are required for the latest DEVELOPMENT version of RMagick. To see prerequisites for the latest RELEASED version of the gem, switch to the master branch.
28
-
29
- *O/S* Linux, *BSD, OS X, Windows 2000, XP, Vista, other *nix-like systems.
30
-
31
- *Ruby* 2.3 or later. You can get Ruby from "www.ruby-lang.org":http://www.ruby-lang.org.
32
-
33
- Ruby must be able to build C-Extensions (e.g. MRI, Rubinius, not JRuby)
34
-
35
- *ImageMagick* Version 6.7.7 or later (6.x.x). Version 7 is NOT yet supported; ETA Summer 2019 (https://github.com/rmagick/rmagick/issues/256). You can get ImageMagick from "www.imagemagick.org":http://www.imagemagick.org.
36
-
37
- On Ubuntu, you can run:
38
-
39
- bc. sudo apt-get install libmagickwand-dev
40
-
41
- On Centos, you can run:
42
-
43
- bc. sudo yum install gcc ImageMagick-devel make which
44
-
45
- *Note to Windows users:* Please make sure that you choose an ImageMagick version that matches the bitness of your Ruby version.
46
-
47
- h2(#install). Installing RMagick
48
-
49
- h4. Installing via Bundler
50
-
51
- Add to your `Gemfile`:
52
-
53
- bc. gem 'rmagick'
54
-
55
- Then run:
56
-
57
- bc. bundle install
58
-
59
- h4. Installing via RubyGems
60
-
61
- Run:
62
-
63
- bc. gem install rmagick
64
-
65
- h4. Versioning
66
-
67
- RMagick is versioned according to Semantic Versioning.
68
- For stable version compatible with Ruby 1.8+, use `~> 2.0`.
69
- Upcoming version 3 will work on Ruby 2.x only.
70
-
71
- h2(#usage). Using RMagick
72
-
73
- Require RMagick in your project as follows:
74
-
75
- bc. require 'rmagick'
76
-
77
- See https://rmagick.github.io/usage.html for links to more information.
78
-
79
- h2(#wrong). Things that can go wrong
80
-
81
- The "RMagick installation FAQ":https://web.archive.org/web/20140512193354/http://rmagick.rubyforge.org/install-faq.html
82
- has answers to the most commonly reported problems, though may be out of date.
83
-
84
- h4. Can't install RMagick. Can't find libMagick or one of the dependent libraries. Check the mkmf.log file for more detailed information.
85
-
86
- Typically this message means that one or more of the libraries that ImageMagick
87
- depends on hasn't been installed. Examine the mkmf.log file in the ext/RMagick
88
- subdirectory of the installation directory for any error messages. These messages
89
- typically contain enough additional information for you to be able to diagnose
90
- the problem. Also see "this FAQ":https://web.archive.org/web/20140512193354/http://rmagick.rubyforge.org/install-faq.html#libmagick.
91
-
92
- On OS X with Homebrew, try [re]installing pkg-config:
93
-
94
- <pre>
95
- brew uninstall pkg-config
96
- brew install pkg-config
97
- brew unlink pkg-config
98
- brew link pkg-config
99
- </pre>
100
-
101
- h4. Cannot open shared object file
102
-
103
- If you get a message like this:
104
-
105
- <pre>
106
- $DIR/RMagick.rb:11:in `require': libMagick.so.0:
107
- cannot open shared object file: No such file or directory -
108
- $DIR/RMagick2.so (LoadError)
109
- </pre>
110
-
111
- you probably do not have the directory in which the ImageMagick library
112
- is installed in your load path. An easy way to fix this is to define
113
- the directory in the LD_LIBRARY_PATH environment variable. For
114
- example, suppose you installed the ImageMagick library libMagick.so in
115
- /usr/local/lib. (By default this is where it is installed.) Create the
116
- LD_LIBRARY_PATH variable like this:
117
-
118
- <pre>
119
- export LD_LIBRARY_PATH=/usr/local/lib
120
- </pre>
121
-
122
- On Linux, see @ld(1)@ and @ld.so(8)@ for more information. On other operating
123
- systems, see the documentation for the dynamic loading facility.
124
-
125
- h4. Segmentation fault
126
-
127
- Default stack size of your operating system might be too small. Try removing the limit with this command:
128
-
129
- <pre>
130
- ulimit -s unlimited
131
- </pre>
132
-
133
- h2(#upgrade). Upgrading
134
-
135
- If you upgrade to a newer release of ImageMagick, make sure you're using a
136
- release of RMagick that supports that release. It's safe to install a new
137
- release of RMagick over an earlier release.
138
-
139
- h2(#samples). More samples
140
-
141
- You can find more sample RMagick programs in the /example directory.
142
- These programs are not installed in the RMagick documentation tree.
143
-
144
- h2(#bugs). Reporting bugs
145
-
146
- Please report bugs in RMagick, its documentation, or its installation
147
- programs to me via the bug tracker on the "RMagick issues page":https://github.com/rmagick/rmagick/issues
148
-
149
- However, I can't help with Ruby installation and configuration or ImageMagick
150
- installation and configuration. Information about reporting problems and
151
- getting help for ImageMagick is available at the "ImageMagick web site":http://www.imagemagick.org
152
- or the "ImageMagick Forum":http://www.imagemagick.org/discourse-server.
153
-
154
- h2(#dev-setup). Development Setup
155
-
156
- In order to minimize issues on your local machine, we recommend that you make
157
- use of a "Vagrant installation":https://github.com/tjschuck/rake-compiler-dev-box.
158
-
159
- Steps to get up and running with a passing build are as follows:
160
-
161
- h4. 1) set up the Vagrant environment
162
-
163
- If you don't already have Vagrant installed, you can download and install it
164
- from "here":https://www.vagrantup.com/. Once installed, we can set up a pre-built environment:
165
-
166
- <pre>
167
- git clone https://github.com/tjschuck/rake-compiler-dev-box.git
168
- cd rake-compiler-dev-box
169
- vagrant up
170
- </pre>
171
-
172
- This last part will probably take a while as it has to download an Ubuntu image
173
- and configure it. If there is an error during this process, you may need to
174
- reboot your computer and enable virtualization in your BIOS settings.
175
-
176
- h4. 2) clone RMagick and log in to the vagrant box
177
-
178
- Within the `rake-compiler-dev-box` directory:
179
-
180
- <pre>
181
- git clone https://github.com/rmagick/rmagick.git # or your fork
182
- vagrant ssh
183
- </pre>
184
-
185
- h4. 3) install ImageMagick and additional environment stuff
186
-
187
- <pre>
188
- cd /vagrant/rmagick
189
- export IMAGEMAGICK_VERSION=6.8.9-10
190
- sh ./before_install_linux.sh
191
- </pre>
192
-
193
- This will take just a few minutes to build ImageMagick
194
-
195
- h4. 4) build RMagick
196
-
197
- <pre>
198
- rake
199
- </pre>
200
-
201
- This compiles the RMagick extensions and runs the tests. If all goes well
202
- you'll see a lot of output, eventually ending in something like:
203
-
204
- <pre>
205
- Finished tests in 35.865734s, 11.3758 tests/s, 6560.3007 assertions/s.
206
-
207
- 408 tests, 235290 assertions, 0 failures, 0 errors, 0 skips
208
- </pre>
209
-
210
- And you're all set! The copy of RMagick within `/vagrant/rmagick` inside your
211
- Vagrant session is the same as the one in the `rake-compiler-dev-box` directory
212
- on your machine. You can make changes locally and run tests within your `ssh`
213
- session.
214
-
215
- h2(#contact). Contact Information
216
-
217
- *Author:* Tim Hunter, Omer Bar-or, Benjamin Thomas
218
-
219
- h2(#credits). Credits
220
-
221
- Thanks to "ImageMagick Studio LLC":http://www.imagemagick.org for ImageMagick
222
- and for hosting the RMagick documentation.
223
-
224
- h2(#license). MIT License
225
-
226
- <pre>
227
- Copyright &copy; 2002-2009 by Timothy P. Hunter
228
-
229
- Changes since Nov. 2009 copyright &copy; by Benjamin Thomas and Omer Bar-or
230
-
231
- Permission is hereby granted, free of charge, to any person obtaining a
232
- copy of this software and associated documentation files (the "Software"),
233
- to deal in the Software without restriction, including without limitation
234
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
235
- and/or sell copies of the Software, and to permit persons to whom the
236
- Software is furnished to do so, subject to the following conditions:
237
-
238
- The above copyright notice and this permission notice shall be included in
239
- all copies or substantial portions of the Software.
240
-
241
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
242
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
243
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
244
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
245
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
246
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
247
- DEALINGS IN THE SOFTWARE.
248
- </pre>
249
-
250
- <hr>
251
-
252
- h2(#releasing). Releasing
253
-
254
- See https://github.com/rmagick/rmagick/wiki/Release-Process
255
-
256
- # Update ChangeLog
257
- # Edit lib/rmagick/version.rb
258
- # Are the tests passing? Run `rake` again just to be sure.
259
- # `rake release`
@@ -1,50 +0,0 @@
1
- # How to measure the memory usage
2
-
3
- ## 1. Install gnuplot
4
- If you need a graph of memory usage, it can draw the graph with `gnuplot`.
5
-
6
- With `Homebrew`, you can install `gnuplot` like
7
-
8
- ```
9
- $ brew install gnuplot
10
- ```
11
-
12
- ## 2. Retrieve two performance data `before` / `after`
13
- Retrieve data before applying patches.
14
-
15
- ```
16
- $ rake build
17
- $ gem install pkg/rmagick-3.1.0.gem
18
- $ cd benchmarks/memory
19
- $ ruby image_new.rb > before.csv
20
- ```
21
-
22
- Apply the patches then retrieve improved data.
23
-
24
- ```
25
- $ rake build
26
- $ gem install pkg/rmagick-3.1.0.gem
27
- $ cd benchmarks/memory
28
- $ ruby image_new.rb > after.csv
29
- ```
30
-
31
- ## 3. Draw the performance graph
32
- Launch `gnuplot` and execute `load 'rmagick.gnuplot'` command in prompt then the performance graph will be drew.
33
-
34
- ```
35
- $ cd benchmarks/memory
36
- $ gnuplot
37
-
38
- G N U P L O T
39
- Version 5.2 patchlevel 7 last modified 2019-05-29
40
-
41
- Copyright (C) 1986-1993, 1998, 2004, 2007-2018
42
- Thomas Williams, Colin Kelley and many others
43
-
44
- gnuplot home: http://www.gnuplot.info
45
- faq, bugs, etc: type "help FAQ"
46
- immediate help: type "help" (plot window: hit 'h')
47
-
48
- Terminal type is now 'qt'
49
- gnuplot> load 'rmagick.gnuplot'
50
- ```
@@ -1,8 +0,0 @@
1
- require 'rmagick'
2
-
3
- 1000.times do |i|
4
- Magick::Image.new(1000, 1000)
5
-
6
- rss = Integer(`ps -o rss= -p #{Process.pid}`) / 1024.0
7
- puts "#{i},#{rss}"
8
- end
@@ -1,16 +0,0 @@
1
- set datafile separator ","
2
-
3
- set key outside center top horizontal reverse Left samplen 2
4
- unset border
5
- set xtics scale 0
6
- set ytics scale 0
7
- set grid ytics linewidth 1 linetype -1
8
-
9
- set style line 1 lt 1 lc rgbcolor "#3465a4" lw 2.5 pt 7 ps 1
10
- set style line 2 lt 1 lc rgbcolor "#ff6347" lw 2.5 pt 7 ps 1
11
- set style line 3 lt 1 lc rgbcolor "#888a85" lw 2.5 pt 5 ps 1
12
-
13
- set xlabel "Nth loop"
14
- set ylabel "Memory usage (MiB)"
15
-
16
- plot "before.csv" with line linestyle 1, "after.csv" with line linestyle 2
data/doc/.cvsignore DELETED
@@ -1 +0,0 @@
1
- c
data/doc/comtasks.html DELETED
@@ -1,287 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
-
4
- <html xmlns="http://www.w3.org/1999/xhtml">
5
- <head>
6
- <meta name="generator" content=
7
- "HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org" />
8
-
9
- <title>RMagick 0.0.0: Common Tasks</title>
10
- <meta http-equiv="Content-Type" content=
11
- "text/html; charset=us-ascii" />
12
- <meta name="GENERATOR" content="Quanta Plus" />
13
- <meta name="Copyright" content=
14
- "Copyright (C) 2006 by Timothy P. Hunter" />
15
- <link rel="stylesheet" type="text/css" href="css/doc.css" />
16
- <script type="text/javascript" src="scripts/doc.js">
17
- </script>
18
- <style type="text/css">
19
- /*<![CDATA[*/
20
-
21
- /* Styles local to this page. */
22
- #drop_shadow {
23
- margin-left: auto;
24
- margin-right: auto;
25
- width: 250px;
26
- }
27
-
28
-
29
- /*]]>*/
30
- </style>
31
- </head>
32
-
33
- <body>
34
- <h6 id="header">RMagick 0.0.0 User's Guide and Reference</h6>
35
-
36
- <div class="nav">
37
- &laquo;&nbsp;<a href="optequiv.html">Prev</a> | <a href=
38
- "index.html">Contents</a> | <a href=
39
- "magick.html">Next</a>&nbsp;&raquo;
40
- </div>
41
-
42
- <h1>Common Tasks</h1>
43
-
44
- <div id="toc">
45
- <h2>Table of Contents</h2>
46
-
47
- <ul style="margin-left: 15px; padding-top: 1em;">
48
- <li><a href="#info">Getting information about an
49
- image</a></li>
50
-
51
- <li><a href="#convert">Converting an image to another
52
- format</a></li>
53
-
54
- <li><a href="#thumb">Making thumbnails</a></li>
55
-
56
- <li><a href="#resizing">Resizing to a maximum (or minimum)
57
- size</a></li>
58
-
59
- <li><a href="#blob">Writing to or reading from a string
60
- instead of a file</a></li>
61
-
62
- <li><a href="#gray">Converting a color image to
63
- grayscale</a></li>
64
-
65
- <li><a href="#compressing">Compressing image files</a></li>
66
-
67
- <li><a href="#shadow">Making a drop shadow</a></li>
68
- </ul>
69
- </div>
70
-
71
- <h2 id="info">Getting information about an image</h2>
72
-
73
- <p>One of the most fundamental operations on an image is simply
74
- getting basic information about the image. RMagick assigns dozens
75
- of <a href="imageattrs.html">attributes</a> to an image. All you
76
- have to do is read the image and then call the attribute methods.
77
- Here's a Ruby program that takes image filenames from the command
78
- line and then prints a variety of information about each image to
79
- the terminal.</p>
80
- <pre class="example">
81
- require "rmagick"
82
- ARGV.each { |file|
83
- puts file
84
- img = Magick::Image::read(file).first
85
- puts " Format: #{img.format}"
86
- puts " Geometry: #{img.columns}x#{img.rows}"
87
- puts " Class: " + case img.class_type
88
- when Magick::DirectClass
89
- "DirectClass"
90
- when Magick::PseudoClass
91
- "PseudoClass"
92
- end
93
- puts " Depth: #{img.depth} bits-per-pixel"
94
- puts " Colors: #{img.number_colors}"
95
- puts " Filesize: #{img.filesize}"
96
- puts " Resolution: #{img.x_resolution.to_i}x#{img.y_resolution.to_i} "+
97
- "pixels/#{img.units == Magick::PixelsPerInchResolution ?
98
- "inch" : "centimeter"}"
99
- if img.properties.length &gt; 0
100
- puts " Properties:"
101
- img.properties { |name,value|
102
- puts %Q| #{name} = "#{value}"|
103
- }
104
- end
105
- }
106
- </pre>
107
-
108
- <h2 id="convert">Converting an image to another format</h2>
109
-
110
- <p>Converting an image to another format is as simple as writing
111
- the image to a file. ImageMagick uses the output filename
112
- suffix (".jpg" for JPEG, ".gif" for GIF, for example) or prefix
113
- ("ps:" for PostScript, for example) to determine the format of
114
- the output image.</p>
115
-
116
- <h2 id="thumb">Making thumbnails</h2>
117
-
118
- <p>RMagick gives you four different methods for resizing an
119
- image: <a href="image3.html#resize"><code>resize</code></a>,
120
- <a href="image3.html#sample"><code>sample</code></a>, <a href=
121
- "image3.html#scale"><code>scale</code></a>, and <a href=
122
- "image3.html#thumbnail"><code>thumbnail</code></a>. All four are
123
- equally easy to use. Specify the number of columns and rows you
124
- want the thumbnail to have, like this:</p>
125
- <pre class="example">
126
- img = Image.new "bigimage.gif"
127
- thumb = img.scale(125, 125)
128
- thumb.write "thumb.gif"
129
- </pre>
130
-
131
- <p>Alternatively, just pass a single <code>Float</code> argument
132
- that represents the change in size. For example, to
133
- proportionally reduce the size of an image to 25% of its original
134
- size, do this:</p>
135
- <pre class="example">
136
- img = Image.new "bigimage.gif"
137
- thumb = img.scale(0.25)
138
- thumb.write "thumb.gif"
139
- </pre>
140
-
141
- <p>The <code>resize</code> method gives you more control by
142
- allowing you to specify a <a href=
143
- "constants.html#FilterType">filter</a> to use when scaling the
144
- image. Some filters produce a better-looking thumbnail at the
145
- expense of extra processing time. You can also use a
146
- <code>blur</code> argument, which specifies how much blurriness
147
- or sharpness the resize method should introduce.</p>
148
-
149
- <p>The <code>sample</code> method, unlike the other two, does not
150
- do any color interpolation when resizing.</p>
151
-
152
- <p>The <code>thumbnail</code> method is faster than
153
- <code>resize</code> if the thumbnail is less than 10% of the size
154
- of the original image.</p>
155
-
156
- <h3>flickr-style thumbnails</h3>
157
-
158
- <p><a href="http://www.flickr.com">flickr</a> thumbnails are 75
159
- pixels wide and 75 pixels tall. If the original image isn't
160
- square, the thumbnail is cropped in its larger dimension so that
161
- the image isn't distorted. You can get make this kind of
162
- thumbnail with the <a href=
163
- "image3.html#resize_to_fill">resize_to_fill</a> method.</p>
164
- <pre class="example">
165
- thumb = img.resize_to_fill(75, 75)
166
- </pre>
167
-
168
- <h2 id="resizing">Resizing to a maximum (or minimum) size</h2>
169
-
170
- <p>Say you need to make all your thumbnails no bigger than 64x64
171
- but with the same aspect ratio as the original. Or, you don't
172
- want to resize the image if it's already smaller than 64x64. The
173
- <a href=
174
- "image1.html#change_geometry"><code>change_geometry</code></a>
175
- method can help.</p>
176
-
177
- <p>The <code>change_geometry</code> method accepts an
178
- ImageMagick <a href="imusage.html#geometry">geometry string</a>
179
- argument and a block. The geometry string specifies how to change
180
- the image's size: one or two numbers to specify the new size and
181
- optional flags to describe any constraints. The
182
- <code>change_geometry</code> method parses the geometry string
183
- and computes new width and height values. Then it calls the
184
- block, passing the values it computed.</p>
185
-
186
- <p>Within the block you can do whatever you want with the new
187
- values. Typically you'll call one of the resize methods mentioned
188
- in the previous section and make the resized image the return
189
- value from the block. The <code>change_geometry</code> method
190
- then returns that value to its caller.</p>
191
-
192
- <h3>Simple thumbnails</h3>
193
-
194
- <p>If you just want to make sure your thumbnail is no bigger than
195
- a certain width and height, use the <a href=
196
- "image3.html#resize_to_fit">resize_to_fit</a> method.</p>
197
- <pre class="example">
198
- thumb = img.resize_to_fit(75, 75)
199
- </pre>
200
-
201
- <h2><a id="blob" name="blob">Writing to or reading from a string
202
- instead of a file</a></h2>
203
-
204
- <p>Use the <a href="image1.html#from_blob">Image.from_blob</a>
205
- method to construct an Image object from a string. Use the
206
- <a href="image3.html#to_blob">Image#to_blob</a> method to convert
207
- an image to a string. A blob is simply an in-memory version of an
208
- image file. That is, you could use <code>File.read</code> to read
209
- an JPEG file into a string, then create an image by using that
210
- string as an argument to <code>from_blob</code>. Similarly, if
211
- you create a string version of an image with
212
- <code>to_blob</code>, then write the string to a file, any image
213
- viewer will be able to display it just as if you had written the
214
- image directly to a file. Blobs are very useful in web
215
- applications when you want to modify an image and then stream it
216
- back to the client.</p>
217
-
218
- <p>Use <a href=
219
- "image2.html#import_pixels">Image#import_pixels</a> to load pixel
220
- data from a string buffer into an image. The pixel data must be
221
- in scanline order, right-to-left and top-to-bottom. The data can
222
- be packed as 8-bit bytes, 16-bit halfwords, 32-bit fullwords, or
223
- as C floats or doubles. The reciprocal method is <a href=
224
- "image3.html#export_pixels_to_str">Image#export_pixels_to_str</a>.</p>
225
-
226
- <h2 id="gray">Converting a color image to grayscale</h2>
227
-
228
- <p>Use the <a href=
229
- "image3.html#quantize"><code>quantize</code></a> method with the
230
- <a href=
231
- "constants.html#ColorspaceType">Magick::GRAYColorspace</a>
232
- argument. If you want real "grayscale," quantize the image to 256
233
- colors. If you want to convert a color image to black-and-white,
234
- use 2 colors. (See the <code>demo.rb</code> example.)</p>
235
-
236
- <h2 id="compressing">Compressing image files</h2>
237
-
238
- <p>Many image formats, including JPEG, PDF, and BMP, support
239
- compressed image files. The type of compression used depends on
240
- the format. Specify the compression type by assigning a <a href=
241
- "constants.html#CompressionType">CompressionType</a> value to the
242
- <a href="info.html#compression">compression</a> optional argument
243
- to the <a href="image3.html#write">write</a> method.</p>
244
-
245
- <p>The JPEGCompression and ZipCompression types support multiple
246
- levels of compression. Use the <a href=
247
- "info.html#quality">quality</a> optional argument to the
248
- <code>write</code> method. The quality attribute is a number
249
- between 0 and 100, with 100 representing the least compression.
250
- When you compress an image using JPEGCompression, more
251
- compression usually results in a lower-quality image. When you
252
- compress an image using ZipCompression, more compression usually
253
- takes longer.</p>
254
-
255
- <p>For more information, see the ImageMagick documentation for
256
- the <code>-quality</code> option to the utility commands.</p>
257
- <pre class="example">
258
- img.write("myimage.jpg") { self.quality = 50 }
259
- </pre>
260
-
261
- <h2 id="shadow">Making a drop shadow</h2>
262
-
263
- <p>Here's one way to make a drop shadow behind text. Make the
264
- shadow first by drawing the text in a light gray color. Position
265
- the text slightly to the right and down from where the real text
266
- will be. Then use the <a href=
267
- "image1.html#blur_image"><code>blur_image</code></a> method to
268
- make the shadow by blurring the text. Finally, draw the text
269
- again in whatever color you want. <em>(Click the image to see the
270
- Ruby program that created it.)</em></p>
271
-
272
- <div id="drop_shadow">
273
- <a href="javascript:popup('drop_shadow.rb.html')"><img src=
274
- "ex/drop_shadow.gif" title="Click to see the example script"
275
- alt="drop shadow example" /></a>
276
- </div>
277
- <hr />
278
-
279
- <p class="spacer"></p>
280
-
281
- <div class="nav">
282
- &laquo; <a href="optequiv.html">Prev</a> | <a href=
283
- "index.html">Contents</a> | <a href="magick.html">Next</a>
284
- &raquo;
285
- </div>
286
- </body>
287
- </html>