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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +63 -0
- data/.editorconfig +3 -0
- data/.github/workflows/ci.yml +148 -0
- data/.gitignore +3 -1
- data/.rspec +1 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +80 -270
- data/.yardopts +5 -0
- data/CHANGELOG.md +63 -0
- data/CONTRIBUTING.md +14 -10
- data/README.md +292 -0
- data/Rakefile +16 -22
- data/before_install_linux.sh +22 -32
- data/before_install_osx.sh +56 -2
- data/ext/RMagick/extconf.rb +100 -94
- data/ext/RMagick/rmagick.c +77 -104
- data/ext/RMagick/rmagick.h +74 -70
- data/ext/RMagick/rmdraw.c +261 -444
- data/ext/RMagick/rmenum.c +96 -113
- data/ext/RMagick/rmfill.c +46 -77
- data/ext/RMagick/rmilist.c +136 -244
- data/ext/RMagick/rmimage.c +3395 -4166
- data/ext/RMagick/rminfo.c +531 -737
- data/ext/RMagick/rmkinfo.c +21 -87
- data/ext/RMagick/rmmain.c +405 -245
- data/ext/RMagick/rmmontage.c +60 -126
- data/ext/RMagick/rmpixel.c +401 -345
- data/ext/RMagick/rmstruct.c +62 -88
- data/ext/RMagick/rmutil.c +112 -218
- data/lib/rmagick/version.rb +1 -1
- data/lib/rmagick_internal.rb +128 -77
- data/lib/rvg/clippath.rb +2 -1
- data/lib/rvg/container.rb +10 -5
- data/lib/rvg/describable.rb +1 -1
- data/lib/rvg/embellishable.rb +5 -4
- data/lib/rvg/misc.rb +15 -12
- data/lib/rvg/paint.rb +2 -1
- data/lib/rvg/pathdata.rb +12 -11
- data/lib/rvg/rvg.rb +8 -4
- data/lib/rvg/stylable.rb +9 -7
- data/lib/rvg/text.rb +11 -6
- data/lib/rvg/transformable.rb +3 -2
- data/lib/rvg/units.rb +1 -1
- data/rmagick.gemspec +7 -6
- metadata +31 -421
- data/.appveyor.yml +0 -57
- data/.circleci/config.yml +0 -56
- data/.ruby-version +0 -1
- data/.simplecov +0 -27
- data/.travis.yml +0 -64
- data/Doxyfile +0 -1514
- data/README.textile +0 -259
- data/benchmarks/memory/README.md +0 -50
- data/benchmarks/memory/image_new.rb +0 -8
- data/benchmarks/memory/rmagick.gnuplot +0 -16
- data/doc/.cvsignore +0 -1
- data/doc/comtasks.html +0 -287
- data/doc/constants.html +0 -1581
- data/doc/css/doc.css +0 -299
- data/doc/css/popup.css +0 -34
- data/doc/css/ref.css +0 -67
- data/doc/draw.html +0 -3272
- data/doc/ex/InitialCoords.rb +0 -22
- data/doc/ex/NewCoordSys.rb +0 -30
- data/doc/ex/OrigCoordSys.rb +0 -16
- data/doc/ex/PreserveAspectRatio.rb +0 -204
- data/doc/ex/RotateScale.rb +0 -36
- data/doc/ex/Skew.rb +0 -38
- data/doc/ex/Use01.rb +0 -15
- data/doc/ex/Use02.rb +0 -20
- data/doc/ex/Use03.rb +0 -16
- data/doc/ex/ViewBox.rb +0 -31
- data/doc/ex/adaptive_threshold.rb +0 -9
- data/doc/ex/add_noise.rb +0 -16
- data/doc/ex/affine.rb +0 -48
- data/doc/ex/affine_transform.rb +0 -20
- data/doc/ex/arc.rb +0 -49
- data/doc/ex/arcpath.rb +0 -32
- data/doc/ex/arcs01.rb +0 -28
- data/doc/ex/arcs02.rb +0 -59
- data/doc/ex/average.rb +0 -15
- data/doc/ex/axes.rb +0 -64
- data/doc/ex/baseline_shift01.rb +0 -17
- data/doc/ex/bilevel_channel.rb +0 -8
- data/doc/ex/blur_image.rb +0 -12
- data/doc/ex/border.rb +0 -10
- data/doc/ex/bounding_box.rb +0 -42
- data/doc/ex/cbezier1.rb +0 -41
- data/doc/ex/cbezier2.rb +0 -41
- data/doc/ex/cbezier3.rb +0 -41
- data/doc/ex/cbezier4.rb +0 -42
- data/doc/ex/cbezier5.rb +0 -42
- data/doc/ex/cbezier6.rb +0 -53
- data/doc/ex/channel.rb +0 -25
- data/doc/ex/charcoal.rb +0 -12
- data/doc/ex/chop.rb +0 -29
- data/doc/ex/circle.rb +0 -33
- data/doc/ex/circle01.rb +0 -16
- data/doc/ex/clip_path.rb +0 -60
- data/doc/ex/coalesce.rb +0 -57
- data/doc/ex/color_fill_to_border.rb +0 -29
- data/doc/ex/color_floodfill.rb +0 -28
- data/doc/ex/color_histogram.rb +0 -47
- data/doc/ex/color_reset.rb +0 -11
- data/doc/ex/colorize.rb +0 -16
- data/doc/ex/colors.rb +0 -64
- data/doc/ex/compose_mask.rb +0 -22
- data/doc/ex/composite.rb +0 -133
- data/doc/ex/composite_layers.rb +0 -52
- data/doc/ex/composite_tiled.rb +0 -21
- data/doc/ex/contrast.rb +0 -36
- data/doc/ex/crop.rb +0 -31
- data/doc/ex/crop_with_gravity.rb +0 -42
- data/doc/ex/cubic01.rb +0 -43
- data/doc/ex/cubic02.rb +0 -91
- data/doc/ex/cycle_colormap.rb +0 -21
- data/doc/ex/dissolve.rb +0 -12
- data/doc/ex/drawcomp.rb +0 -41
- data/doc/ex/drop_shadow.rb +0 -60
- data/doc/ex/edge.rb +0 -11
- data/doc/ex/ellipse.rb +0 -45
- data/doc/ex/ellipse01.rb +0 -21
- data/doc/ex/emboss.rb +0 -11
- data/doc/ex/enhance.rb +0 -28
- data/doc/ex/equalize.rb +0 -11
- data/doc/ex/evenodd.rb +0 -42
- data/doc/ex/fill_pattern.rb +0 -23
- data/doc/ex/flatten_images.rb +0 -36
- data/doc/ex/flip.rb +0 -11
- data/doc/ex/flop.rb +0 -11
- data/doc/ex/font_styles.rb +0 -32
- data/doc/ex/fonts.rb +0 -16
- data/doc/ex/frame.rb +0 -12
- data/doc/ex/gaussian_blur.rb +0 -11
- data/doc/ex/get_multiline_type_metrics.rb +0 -41
- data/doc/ex/get_pixels.rb +0 -45
- data/doc/ex/get_type_metrics.rb +0 -142
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -45
- data/doc/ex/gravity.rb +0 -78
- data/doc/ex/group.rb +0 -26
- data/doc/ex/hatchfill.rb +0 -27
- data/doc/ex/image.rb +0 -44
- data/doc/ex/images/Apple.miff +0 -0
- data/doc/ex/images/Ballerina.jpg +0 -0
- data/doc/ex/images/Ballerina3.jpg +0 -0
- data/doc/ex/images/Button_0.gif +0 -0
- data/doc/ex/images/Button_1.gif +0 -0
- data/doc/ex/images/Button_2.gif +0 -0
- data/doc/ex/images/Button_3.gif +0 -0
- data/doc/ex/images/Button_4.gif +0 -0
- data/doc/ex/images/Button_5.gif +0 -0
- data/doc/ex/images/Button_6.gif +0 -0
- data/doc/ex/images/Button_7.gif +0 -0
- data/doc/ex/images/Button_8.gif +0 -0
- data/doc/ex/images/Button_9.gif +0 -0
- data/doc/ex/images/Button_A.gif +0 -0
- data/doc/ex/images/Button_B.gif +0 -0
- data/doc/ex/images/Button_C.gif +0 -0
- data/doc/ex/images/Button_D.gif +0 -0
- data/doc/ex/images/Button_E.gif +0 -0
- data/doc/ex/images/Button_F.gif +0 -0
- data/doc/ex/images/Button_G.gif +0 -0
- data/doc/ex/images/Button_H.gif +0 -0
- data/doc/ex/images/Button_I.gif +0 -0
- data/doc/ex/images/Button_J.gif +0 -0
- data/doc/ex/images/Button_K.gif +0 -0
- data/doc/ex/images/Button_L.gif +0 -0
- data/doc/ex/images/Button_M.gif +0 -0
- data/doc/ex/images/Button_N.gif +0 -0
- data/doc/ex/images/Button_O.gif +0 -0
- data/doc/ex/images/Button_P.gif +0 -0
- data/doc/ex/images/Button_Q.gif +0 -0
- data/doc/ex/images/Button_R.gif +0 -0
- data/doc/ex/images/Button_S.gif +0 -0
- data/doc/ex/images/Button_T.gif +0 -0
- data/doc/ex/images/Button_U.gif +0 -0
- data/doc/ex/images/Button_V.gif +0 -0
- data/doc/ex/images/Button_W.gif +0 -0
- data/doc/ex/images/Button_X.gif +0 -0
- data/doc/ex/images/Button_Y.gif +0 -0
- data/doc/ex/images/Button_Z.gif +0 -0
- data/doc/ex/images/Cheetah.jpg +0 -0
- data/doc/ex/images/Coffee.png +0 -0
- data/doc/ex/images/Flower_Hat.jpg +0 -0
- data/doc/ex/images/Gold_Statue.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
- data/doc/ex/images/Leaf.miff +0 -0
- data/doc/ex/images/No.png +0 -0
- data/doc/ex/images/Polynesia.jpg +0 -0
- data/doc/ex/images/Red_Rocks.jpg +0 -0
- data/doc/ex/images/Rocks_On_Beach.miff +0 -0
- data/doc/ex/images/Shorts.jpg +0 -0
- data/doc/ex/images/Snake.png +0 -0
- data/doc/ex/images/Violin.jpg +0 -0
- data/doc/ex/images/Yellow_Rose.miff +0 -0
- data/doc/ex/images/big-duck.gif +0 -0
- data/doc/ex/images/duck.gif +0 -0
- data/doc/ex/images/duck0.gif +0 -0
- data/doc/ex/images/duck1.gif +0 -0
- data/doc/ex/images/duck10.gif +0 -0
- data/doc/ex/images/duck11.gif +0 -0
- data/doc/ex/images/duck12.gif +0 -0
- data/doc/ex/images/duck13.gif +0 -0
- data/doc/ex/images/duck14.gif +0 -0
- data/doc/ex/images/duck15.gif +0 -0
- data/doc/ex/images/duck2.gif +0 -0
- data/doc/ex/images/duck3.gif +0 -0
- data/doc/ex/images/duck4.gif +0 -0
- data/doc/ex/images/duck5.gif +0 -0
- data/doc/ex/images/duck6.gif +0 -0
- data/doc/ex/images/duck7.gif +0 -0
- data/doc/ex/images/duck8.gif +0 -0
- data/doc/ex/images/duck9.gif +0 -0
- data/doc/ex/images/graydient230x6.gif +0 -0
- data/doc/ex/images/image_with_profile.jpg +0 -0
- data/doc/ex/images/logo400x83.gif +0 -0
- data/doc/ex/images/model.miff +0 -0
- data/doc/ex/images/notimplemented.gif +0 -0
- data/doc/ex/images/smile.miff +0 -0
- data/doc/ex/images/spin.gif +0 -0
- data/doc/ex/implode.rb +0 -34
- data/doc/ex/level.rb +0 -11
- data/doc/ex/level_colors.rb +0 -11
- data/doc/ex/line.rb +0 -41
- data/doc/ex/line01.rb +0 -21
- data/doc/ex/mask.rb +0 -35
- data/doc/ex/matte_fill_to_border.rb +0 -39
- data/doc/ex/matte_floodfill.rb +0 -32
- data/doc/ex/matte_replace.rb +0 -39
- data/doc/ex/median_filter.rb +0 -28
- data/doc/ex/modulate.rb +0 -11
- data/doc/ex/mono.rb +0 -23
- data/doc/ex/morph.rb +0 -25
- data/doc/ex/mosaic.rb +0 -37
- data/doc/ex/motion_blur.rb +0 -11
- data/doc/ex/negate.rb +0 -11
- data/doc/ex/negate_channel.rb +0 -9
- data/doc/ex/nested_rvg.rb +0 -21
- data/doc/ex/nonzero.rb +0 -42
- data/doc/ex/normalize.rb +0 -11
- data/doc/ex/oil_paint.rb +0 -11
- data/doc/ex/opacity.rb +0 -37
- data/doc/ex/ordered_dither.rb +0 -11
- data/doc/ex/path.rb +0 -63
- data/doc/ex/pattern1.rb +0 -25
- data/doc/ex/pattern2.rb +0 -26
- data/doc/ex/polaroid.rb +0 -26
- data/doc/ex/polygon.rb +0 -23
- data/doc/ex/polygon01.rb +0 -21
- data/doc/ex/polyline.rb +0 -22
- data/doc/ex/polyline01.rb +0 -21
- data/doc/ex/posterize.rb +0 -8
- data/doc/ex/preview.rb +0 -8
- data/doc/ex/qbezierpath.rb +0 -52
- data/doc/ex/quad01.rb +0 -34
- data/doc/ex/quantize-m.rb +0 -25
- data/doc/ex/radial_blur.rb +0 -9
- data/doc/ex/raise.rb +0 -8
- data/doc/ex/random_threshold_channel.rb +0 -13
- data/doc/ex/rect01.rb +0 -14
- data/doc/ex/rect02.rb +0 -20
- data/doc/ex/rectangle.rb +0 -34
- data/doc/ex/reduce_noise.rb +0 -28
- data/doc/ex/remap.rb +0 -11
- data/doc/ex/remap_images.rb +0 -19
- data/doc/ex/resize_to_fill.rb +0 -8
- data/doc/ex/resize_to_fit.rb +0 -8
- data/doc/ex/roll.rb +0 -9
- data/doc/ex/rotate.rb +0 -44
- data/doc/ex/rotate_f.rb +0 -14
- data/doc/ex/roundrect.rb +0 -33
- data/doc/ex/rubyname.rb +0 -30
- data/doc/ex/rvg_clippath.rb +0 -12
- data/doc/ex/rvg_linecap.rb +0 -42
- data/doc/ex/rvg_linejoin.rb +0 -40
- data/doc/ex/rvg_opacity.rb +0 -18
- data/doc/ex/rvg_pattern.rb +0 -26
- data/doc/ex/rvg_stroke_dasharray.rb +0 -11
- data/doc/ex/segment.rb +0 -11
- data/doc/ex/sepiatone.rb +0 -7
- data/doc/ex/shade.rb +0 -11
- data/doc/ex/shadow.rb +0 -30
- data/doc/ex/shave.rb +0 -15
- data/doc/ex/shear.rb +0 -10
- data/doc/ex/sketch.rb +0 -17
- data/doc/ex/skewx.rb +0 -51
- data/doc/ex/skewy.rb +0 -47
- data/doc/ex/smile.rb +0 -126
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -55
- data/doc/ex/splice.rb +0 -8
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -54
- data/doc/ex/stroke_dasharray.rb +0 -42
- data/doc/ex/stroke_fill.rb +0 -10
- data/doc/ex/stroke_linecap.rb +0 -44
- data/doc/ex/stroke_linejoin.rb +0 -48
- data/doc/ex/stroke_width.rb +0 -49
- data/doc/ex/swirl.rb +0 -17
- data/doc/ex/text.rb +0 -37
- data/doc/ex/text01.rb +0 -16
- data/doc/ex/text_align.rb +0 -36
- data/doc/ex/text_antialias.rb +0 -37
- data/doc/ex/text_styles.rb +0 -19
- data/doc/ex/text_undercolor.rb +0 -28
- data/doc/ex/texture_fill_to_border.rb +0 -34
- data/doc/ex/texture_floodfill.rb +0 -32
- data/doc/ex/texturefill.rb +0 -24
- data/doc/ex/threshold.rb +0 -13
- data/doc/ex/to_blob.rb +0 -13
- data/doc/ex/translate.rb +0 -39
- data/doc/ex/transparent.rb +0 -38
- data/doc/ex/transpose.rb +0 -9
- data/doc/ex/transverse.rb +0 -9
- data/doc/ex/tref01.rb +0 -24
- data/doc/ex/triangle01.rb +0 -15
- data/doc/ex/trim.rb +0 -23
- data/doc/ex/tspan01.rb +0 -17
- data/doc/ex/tspan02.rb +0 -17
- data/doc/ex/tspan03.rb +0 -19
- data/doc/ex/unsharp_mask.rb +0 -28
- data/doc/ex/viewex.rb +0 -33
- data/doc/ex/vignette.rb +0 -12
- data/doc/ex/watermark.rb +0 -27
- data/doc/ex/wave.rb +0 -9
- data/doc/ex/wet_floor.rb +0 -58
- data/doc/ex/writing_mode01.rb +0 -26
- data/doc/ex/writing_mode02.rb +0 -26
- data/doc/ilist.html +0 -2056
- data/doc/image1.html +0 -4680
- data/doc/image2.html +0 -3665
- data/doc/image3.html +0 -4522
- data/doc/imageattrs.html +0 -1638
- data/doc/imusage.html +0 -514
- data/doc/index.html +0 -416
- data/doc/info.html +0 -1499
- data/doc/magick.html +0 -570
- data/doc/optequiv.html +0 -2435
- data/doc/rvg.html +0 -975
- data/doc/rvgclip.html +0 -248
- data/doc/rvggroup.html +0 -305
- data/doc/rvgimage.html +0 -289
- data/doc/rvgpattern.html +0 -475
- data/doc/rvgshape.html +0 -406
- data/doc/rvgstyle.html +0 -270
- data/doc/rvgtext.html +0 -465
- data/doc/rvgtspan.html +0 -238
- data/doc/rvgtut.html +0 -530
- data/doc/rvguse.html +0 -145
- data/doc/rvgxform.html +0 -294
- data/doc/scripts/doc.js +0 -22
- data/doc/scripts/stripeTables.js +0 -23
- data/doc/struct.html +0 -1339
- data/doc/usage.html +0 -1621
- data/examples/constitute.rb +0 -7
- data/examples/crop_with_gravity.rb +0 -43
- data/examples/demo.rb +0 -323
- data/examples/describe.rb +0 -41
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -312
- data/examples/identify.rb +0 -174
- data/examples/image_opacity.rb +0 -28
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -37
- data/examples/rotating_text.rb +0 -45
- data/examples/spinner.rb +0 -49
- data/examples/thumbnail.rb +0 -64
- data/examples/vignette.rb +0 -78
- data/spec/rmagick/ImageList1_spec.rb +0 -24
- data/spec/rmagick/draw_spec.rb +0 -155
- data/spec/rmagick/image/blue_shift_spec.rb +0 -14
- data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
- data/spec/rmagick/image/composite_spec.rb +0 -72
- data/spec/rmagick/image/constitute_spec.rb +0 -13
- data/spec/rmagick/image/dispatch_spec.rb +0 -16
- data/spec/rmagick/image/dissolve_spec.rb +0 -54
- data/spec/rmagick/image/from_blob_spec.rb +0 -12
- data/spec/rmagick/image/ping_spec.rb +0 -12
- data/spec/rmagick/image/properties_spec.rb +0 -27
- data/spec/rmagick/image/read_spec.rb +0 -28
- data/spec/spec_helper.rb +0 -9
- data/spec/support/issue_200/app.rb +0 -8
- data/test/Draw.rb +0 -351
- data/test/Enum.rb +0 -228
- data/test/Fill.rb +0 -93
- data/test/Image1.rb +0 -606
- data/test/Image2.rb +0 -1408
- data/test/Image3.rb +0 -1086
- data/test/ImageList1.rb +0 -858
- data/test/ImageList2.rb +0 -375
- data/test/Image_attributes.rb +0 -635
- data/test/Import_Export.rb +0 -111
- data/test/Info.rb +0 -436
- data/test/KernelInfo.rb +0 -59
- data/test/Magick.rb +0 -311
- data/test/Pixel.rb +0 -259
- data/test/PolaroidOptions.rb +0 -23
- data/test/Preview.rb +0 -26
- data/test/Struct.rb +0 -45
- data/test/appearance/Montage.rb +0 -26
- data/test/appearance/appearance_assertion.rb +0 -13
- data/test/appearance/expected/montage_border_color.jpg +0 -0
- data/test/cmyk.icm +0 -0
- data/test/lib/internal/Draw.rb +0 -811
- data/test/lib/internal/Geometry.rb +0 -98
- data/test/lib/internal/Magick.rb +0 -40
- data/test/srgb.icm +0 -0
- data/test/test_all_basic.rb +0 -49
- data/test/tmpnam_test.rb +0 -50
data/examples/image_opacity.rb
DELETED
@@ -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
|
data/examples/import_export.rb
DELETED
@@ -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
|
data/examples/pattern_fill.rb
DELETED
@@ -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
|
data/examples/rotating_text.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# Demonstrate the Draw#rotation= method by producing
|
2
|
-
# an animated MIFF file showing a rotating text string.
|
3
|
-
|
4
|
-
require 'rmagick'
|
5
|
-
include Magick
|
6
|
-
|
7
|
-
puts <<END_INFO
|
8
|
-
Demonstrate the rotation= attribute in the Draw class
|
9
|
-
by producing an animated image. View the output image
|
10
|
-
by entering the command: animate rotating_text.miff
|
11
|
-
END_INFO
|
12
|
-
|
13
|
-
text = Draw.new
|
14
|
-
text.pointsize = 28
|
15
|
-
text.font_weight = BoldWeight
|
16
|
-
text.font_style = ItalicStyle
|
17
|
-
text.gravity = CenterGravity
|
18
|
-
text.fill = 'white'
|
19
|
-
|
20
|
-
# Let's make it interesting. Composite the
|
21
|
-
# rotated text over a gradient fill background.
|
22
|
-
fill = GradientFill.new(100, 100, 100, 100, 'yellow', 'red')
|
23
|
-
bg = Image.new(200, 200, fill)
|
24
|
-
|
25
|
-
# The "none" color is transparent.
|
26
|
-
fg = Image.new(bg.columns, bg.rows) { self.background_color = 'none' }
|
27
|
-
|
28
|
-
# Here's where we'll collect the individual frames.
|
29
|
-
animation = ImageList.new
|
30
|
-
|
31
|
-
0.step(345, 15) do |degrees|
|
32
|
-
frame = fg.copy
|
33
|
-
text.annotate(frame, 0, 0, 0, 0, 'Rotating Text') do
|
34
|
-
self.rotation = degrees
|
35
|
-
end
|
36
|
-
# Composite the text over the gradient filled background frame.
|
37
|
-
animation << bg.composite(frame, CenterGravity, DisplaceCompositeOp)
|
38
|
-
end
|
39
|
-
|
40
|
-
animation.delay = 8
|
41
|
-
|
42
|
-
# animation.animate
|
43
|
-
puts '...Writing rotating_text.gif'
|
44
|
-
animation.write('rotating_text.gif')
|
45
|
-
exit
|
data/examples/spinner.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
# Make a 32x32 animated GIF that resembles the OS X animation.
|
2
|
-
# This produces a very small (~2.6Kb) GIF file.
|
3
|
-
|
4
|
-
require 'rmagick'
|
5
|
-
|
6
|
-
puts <<END_INFO
|
7
|
-
This example creates an animated GIF that resembles the OS X "waiting" icon.
|
8
|
-
You can view the GIF with the command
|
9
|
-
|
10
|
-
animate spinner.gif
|
11
|
-
END_INFO
|
12
|
-
|
13
|
-
NFRAMES = 12 # number of frames in the animation
|
14
|
-
DIM = 32 # width & height of image in pixels
|
15
|
-
DELAY = 100.0 / (NFRAMES / 2) # 2 rotations per second
|
16
|
-
|
17
|
-
# 'frame' is a single frame in the animation.
|
18
|
-
frame = Magick::Image.new(DIM, DIM) { self.background_color = 'transparent' }
|
19
|
-
|
20
|
-
# 'spinner' will contain the frames that make up the animated GIF
|
21
|
-
spinner = Magick::ImageList.new
|
22
|
-
|
23
|
-
# 'level' is the change from darkest gray to white
|
24
|
-
level = Magick::QuantumRange / 2 / NFRAMES
|
25
|
-
|
26
|
-
NFRAMES.times do |x|
|
27
|
-
gc = Magick::Draw.new
|
28
|
-
gc.translate(DIM / 2, DIM / 2)
|
29
|
-
gc.stroke('none')
|
30
|
-
intensity = 0.58 * Magick::QuantumRange
|
31
|
-
fill_color = Magick::Pixel.new(intensity, intensity, intensity).to_color
|
32
|
-
gc.fill(fill_color)
|
33
|
-
angle = x * (360 / NFRAMES)
|
34
|
-
NFRAMES.times do
|
35
|
-
gc.rotate(angle)
|
36
|
-
intensity = [intensity, Magick::QuantumRange].min
|
37
|
-
fill_color = Magick::Pixel.new(intensity, intensity, intensity).to_color
|
38
|
-
gc.fill(fill_color)
|
39
|
-
gc.roundrectangle(7, -1, 15, 0, 1, 1)
|
40
|
-
angle = -(360 / NFRAMES)
|
41
|
-
intensity += level
|
42
|
-
end
|
43
|
-
spinner << frame.copy
|
44
|
-
gc.draw(spinner)
|
45
|
-
end
|
46
|
-
|
47
|
-
spinner.delay = DELAY
|
48
|
-
spinner.compression = Magick::LZWCompression
|
49
|
-
spinner.write('spinner.gif')
|
data/examples/thumbnail.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'rmagick'
|
2
|
-
include Magick
|
3
|
-
|
4
|
-
puts <<END_INFO
|
5
|
-
|
6
|
-
This example demonstrates how to make a thumbnail of an image.
|
7
|
-
An image is resized to the target size (retaining its original
|
8
|
-
aspect ratio, of course) and then "mounted" on a square background
|
9
|
-
with raised edges.
|
10
|
-
|
11
|
-
Usage:
|
12
|
-
|
13
|
-
ruby thumbnail.rb <filename <size>>
|
14
|
-
|
15
|
-
where `filename' is the name of an image file and `size' is the
|
16
|
-
size of the thumbnail in pixels. The default size is 120 pixels.
|
17
|
-
If you don't specify any arguments this script uses a default
|
18
|
-
image.
|
19
|
-
|
20
|
-
END_INFO
|
21
|
-
|
22
|
-
DEFAULT_SIZE = 120
|
23
|
-
|
24
|
-
case ARGV.length
|
25
|
-
when 2
|
26
|
-
size = ARGV[1].to_i
|
27
|
-
image = ARGV[0]
|
28
|
-
when 1
|
29
|
-
image = ARGV[0]
|
30
|
-
size = DEFAULT_SIZE
|
31
|
-
else
|
32
|
-
size = DEFAULT_SIZE
|
33
|
-
image = '../doc/ex/images/Flower_Hat.jpg'
|
34
|
-
end
|
35
|
-
|
36
|
-
geom = "#{size}x#{size}"
|
37
|
-
|
38
|
-
# Read the image and resize it. The `change_geometry' method
|
39
|
-
# computes the new image geometry and yields to a block. The
|
40
|
-
# return value of the block is the return value of the method.
|
41
|
-
|
42
|
-
img = Image.read(image)[0]
|
43
|
-
img.change_geometry!(geom) { |cols, rows| img.thumbnail! cols, rows }
|
44
|
-
|
45
|
-
# We need a background to display the thumbnail.
|
46
|
-
# Create a square, neutral gray background with raised edges.
|
47
|
-
# Make this background slightly larger than the image to allow
|
48
|
-
# for the raised border. A 3-pixel raised edge means that the
|
49
|
-
# background needs to be 6 pixels larger in each dimension.
|
50
|
-
|
51
|
-
bg = Image.new(size + 6, size + 6) { self.background_color = 'gray75' }
|
52
|
-
bg = bg.raise(3, 3)
|
53
|
-
|
54
|
-
# Just for the purposes of this example, display the thumbnail background on
|
55
|
-
# a larger white background.
|
56
|
-
|
57
|
-
white_bg = Image.new(size + 50, size + 50) { self.background_color = 'white' }
|
58
|
-
white_bg = white_bg.composite(bg, CenterGravity, OverCompositeOp)
|
59
|
-
|
60
|
-
# Finally, center the thumbnail on the gray background.
|
61
|
-
thumbnail = white_bg.composite(img, CenterGravity, OverCompositeOp)
|
62
|
-
|
63
|
-
thumbnail.write('thumbnail.gif')
|
64
|
-
exit
|
data/examples/vignette.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'rmagick'
|
2
|
-
include Magick
|
3
|
-
|
4
|
-
puts <<END_INFO
|
5
|
-
|
6
|
-
vi-gnette (n.) vin-'yet
|
7
|
-
A picture that shades off gradually into the surrounding paper.
|
8
|
-
Merriam-Webster Dictionary
|
9
|
-
|
10
|
-
Vignettes are frequently used in formal portraiture and advertising
|
11
|
-
images. This example creates a vignette from a picture of a ballerina.
|
12
|
-
It takes a few seconds to run. Be patient.
|
13
|
-
|
14
|
-
END_INFO
|
15
|
-
|
16
|
-
ballerina = Image.read('../doc/ex/images/Ballerina3.jpg')[0]
|
17
|
-
|
18
|
-
# Note: this technique won't work with every image. To make a pretty
|
19
|
-
# vignette you need an image with a uniform, fairly dark background.
|
20
|
-
|
21
|
-
# Start by drawing a white oval on a black background. (Although you don't
|
22
|
-
# have to use an oval at all! Any shape will work. Try a rounded rectangle.)
|
23
|
-
# The black pixels correspond to pixels in the image that will become
|
24
|
-
# transparent. The white pixels correspond to pixels in the image that will
|
25
|
-
# remain unchanged. Gray pixels, introduced by the blurring below, will
|
26
|
-
# become more or less transparent depending on how dark or light the pixel is.
|
27
|
-
|
28
|
-
# The size of the oval is arbitrary - in this case it's 90% of the
|
29
|
-
# size of the image.
|
30
|
-
|
31
|
-
oval = Image.new(ballerina.columns, ballerina.rows) { self.background_color = 'black' }
|
32
|
-
gc = Draw.new
|
33
|
-
gc.stroke('white')
|
34
|
-
gc.fill('white')
|
35
|
-
gc.ellipse(ballerina.columns / 2, ballerina.rows / 2,
|
36
|
-
ballerina.columns / 2 - (ballerina.columns * 0.10),
|
37
|
-
ballerina.rows / 2 - (ballerina.rows * 0.10), 0, 360)
|
38
|
-
gc.draw(oval)
|
39
|
-
|
40
|
-
# Add a lot of blurring to the oval. I use blur_image because it's much faster
|
41
|
-
# than the gaussian_blur method and produces no observable difference. The
|
42
|
-
# exact amount of blurring is a judgment call. The higher the 2nd argument, the
|
43
|
-
# more blurring, although increasing the value above 20 doesn't seem to add any
|
44
|
-
# additional blurriness.
|
45
|
-
|
46
|
-
oval = oval.blur_image(0, 20)
|
47
|
-
|
48
|
-
# The CopyAlphaCompositeOp transforms the opacity level of each image pixel
|
49
|
-
# according to the intensity of the composite image pixels. In this case, the
|
50
|
-
# black pixels outside the oval become transparent and the white pixels inside
|
51
|
-
# the oval remain opaque. Each gray pixel around the border of the oval has a
|
52
|
-
# varying level of transparency depending on how dark or light it is.
|
53
|
-
|
54
|
-
ballerina.alpha(Magick::ActivateAlphaChannel) # Ensure the ballerina image's opacity channel is enabled.
|
55
|
-
oval.alpha(Magick::DeactivateAlphaChannel) # Force the CopyAlphaCompositeOp to use pixel intensity
|
56
|
-
# to determine how much transparency to add to the ballerina
|
57
|
-
# pixels.
|
58
|
-
|
59
|
-
ballerina = ballerina.composite(oval, CenterGravity, CopyAlphaCompositeOp)
|
60
|
-
|
61
|
-
# Since the vignette has multiple levels of transparency, we can't
|
62
|
-
# save it as a GIF or a JPEG. The PNG format can handle it, though.
|
63
|
-
|
64
|
-
begin
|
65
|
-
ballerina.write('vignette.png')
|
66
|
-
rescue ImageMagickError
|
67
|
-
puts 'Write failed. No PNG support?'
|
68
|
-
# In case PNG support isn't installed, just ignore the exception.
|
69
|
-
end
|
70
|
-
|
71
|
-
# At this point the vignette is complete. However, the `display' method only
|
72
|
-
# supports 1`level of transparency. Therefore, composite the vignette over a
|
73
|
-
# standard "checkerboard" background. The resulting image will be 100% opaque.
|
74
|
-
|
75
|
-
checkerboard = Image.read('pattern:checkerboard') { self.size = "#{ballerina.columns}x#{ballerina.rows}" }
|
76
|
-
vignette = checkerboard[0].composite(ballerina, CenterGravity, OverCompositeOp)
|
77
|
-
vignette.write('vignette.png')
|
78
|
-
exit
|
@@ -1,24 +0,0 @@
|
|
1
|
-
RSpec.describe Magick::ImageList do
|
2
|
-
describe 'images_from_imagelist' do
|
3
|
-
it 'works with identical instances' do
|
4
|
-
expect do
|
5
|
-
img = Magick::Image.new(1, 1)
|
6
|
-
list = described_class.new
|
7
|
-
list << img << img
|
8
|
-
res = list.append(false)
|
9
|
-
expect(res.columns).to eq(2)
|
10
|
-
expect(res.rows).to eq(1)
|
11
|
-
end.not_to raise_error
|
12
|
-
|
13
|
-
expect do
|
14
|
-
img = Magick::Image.new(1, 1)
|
15
|
-
img2 = Magick::Image.new(3, 3)
|
16
|
-
list = described_class.new
|
17
|
-
list.concat([img, img2, img, img2, img])
|
18
|
-
res = list.append(false)
|
19
|
-
expect(res.columns).to eq(9)
|
20
|
-
expect(res.rows).to eq(3)
|
21
|
-
end.not_to raise_error
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
data/spec/rmagick/draw_spec.rb
DELETED
@@ -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
|