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.
- checksums.yaml +5 -5
- data/.codeclimate.yml +63 -0
- data/.devcontainer/Dockerfile +14 -0
- data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
- data/.devcontainer/devcontainer.json +11 -0
- data/.devcontainer/setup-repo.sh +10 -0
- data/.devcontainer/setup-user.sh +45 -0
- data/.editorconfig +3 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/workflows/ci.yml +79 -0
- data/.gitignore +5 -1
- data/.rspec +1 -0
- data/.rubocop.yml +37 -340
- data/.rubocop_todo.yml +448 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +435 -0
- data/CODE_OF_CONDUCT.md +122 -7
- data/CONTRIBUTING.md +37 -6
- data/Gemfile +0 -6
- data/README.md +317 -0
- data/Rakefile +37 -35
- data/before_install_linux.sh +65 -28
- data/before_install_osx.sh +58 -2
- data/ext/RMagick/extconf.rb +286 -393
- data/ext/RMagick/rmagick.c +106 -111
- data/ext/RMagick/rmagick.h +235 -331
- data/ext/RMagick/rmagick_gvl.h +224 -0
- data/ext/RMagick/rmdraw.c +484 -842
- data/ext/RMagick/rmenum.c +316 -755
- data/ext/RMagick/rmfill.c +281 -191
- data/ext/RMagick/rmilist.c +450 -455
- data/ext/RMagick/rmimage.c +6247 -5289
- data/ext/RMagick/rminfo.c +721 -894
- data/ext/RMagick/rmkinfo.c +228 -0
- data/ext/RMagick/rmmain.c +727 -519
- data/ext/RMagick/rmmontage.c +127 -172
- data/ext/RMagick/rmpixel.c +638 -431
- data/ext/RMagick/rmstruct.c +102 -282
- data/ext/RMagick/rmutil.c +450 -363
- data/lib/rmagick/version.rb +5 -4
- data/lib/rmagick.rb +2 -0
- data/lib/rmagick_internal.rb +349 -413
- data/lib/rvg/clippath.rb +3 -4
- data/lib/rvg/container.rb +30 -22
- data/lib/rvg/deep_equal.rb +11 -11
- data/lib/rvg/describable.rb +2 -2
- data/lib/rvg/embellishable.rb +63 -68
- data/lib/rvg/misc.rb +136 -139
- data/lib/rvg/paint.rb +2 -1
- data/lib/rvg/pathdata.rb +7 -8
- data/lib/rvg/rvg.rb +47 -46
- data/lib/rvg/stretchable.rb +22 -28
- data/lib/rvg/stylable.rb +12 -10
- data/lib/rvg/text.rb +169 -165
- data/lib/rvg/transformable.rb +17 -16
- data/lib/rvg/units.rb +5 -5
- data/rmagick.gemspec +16 -39
- metadata +118 -395
- data/.hound.yml +0 -2
- data/.simplecov +0 -27
- data/.travis.yml +0 -74
- data/Doxyfile +0 -1514
- data/README.textile +0 -251
- data/deprecated/RMagick.rb +0 -6
- 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 -53
- 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 -42
- 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 -20
- 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 -47
- data/doc/ex/get_type_metrics.rb +0 -141
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -45
- data/doc/ex/gravity.rb +0 -80
- 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.wmf +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.wmf +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.wmf +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 -35
- 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 -27
- 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 -125
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -54
- data/doc/ex/splice.rb +0 -8
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -55
- 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 -565
- 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 -42
- data/examples/demo.rb +0 -324
- data/examples/describe.rb +0 -43
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -321
- data/examples/identify.rb +0 -185
- data/examples/image_opacity.rb +0 -29
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -38
- data/examples/rotating_text.rb +0 -44
- 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 -156
- data/spec/rmagick/image/blue_shift_spec.rb +0 -16
- data/spec/rmagick/image/composite_spec.rb +0 -140
- data/spec/rmagick/image/constitute_spec.rb +0 -15
- data/spec/rmagick/image/dispatch_spec.rb +0 -18
- data/spec/rmagick/image/from_blob_spec.rb +0 -14
- data/spec/rmagick/image/ping_spec.rb +0 -14
- data/spec/rmagick/image/properties_spec.rb +0 -29
- data/spec/spec_helper.rb +0 -4
- data/test/Image1.rb +0 -565
- data/test/Image2.rb +0 -1304
- data/test/Image3.rb +0 -1030
- data/test/ImageList1.rb +0 -806
- data/test/ImageList2.rb +0 -385
- data/test/Image_attributes.rb +0 -697
- data/test/Import_Export.rb +0 -121
- data/test/Info.rb +0 -345
- data/test/Magick.rb +0 -321
- data/test/Pixel.rb +0 -116
- data/test/Preview.rb +0 -57
- data/test/cmyk.icm +0 -0
- data/test/srgb.icm +0 -0
- data/test/test_all_basic.rb +0 -38
- data/test/tmpnam_test.rb +0 -50
- data/wercker.yml +0 -10
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 CopyOpacityCompositeOp 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.matte = true # Ensure the ballerina image's opacity channel is enabled.
|
55
|
-
oval.matte = false # Force the CopyOpacityCompositeOp to use pixel intensity
|
56
|
-
# to determine how much transparency to add to the ballerina
|
57
|
-
# pixels.
|
58
|
-
|
59
|
-
ballerina = ballerina.composite(oval, CenterGravity, CopyOpacityCompositeOp)
|
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.display
|
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 = Magick::ImageList.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 = Magick::ImageList.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,156 +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) { Magick::Draw.new }
|
9
|
-
|
10
|
-
describe '._dummy_img_' do
|
11
|
-
it 'works' do
|
12
|
-
# initially this variable is not defined.
|
13
|
-
expect { Magick::Draw._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 = Magick::Draw._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 = Magick::Draw._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
|
-
rose = Magick::Image.read('rose:').first
|
85
|
-
granite = Magick::Image.read('granite:').first
|
86
|
-
s = granite.to_blob { self.format = 'miff' }
|
87
|
-
granite = Magick::Image.from_blob(s).first
|
88
|
-
blue_stroke = Magick::Image.new(20,20) { self.background_color = 'blue' }
|
89
|
-
s = blue_stroke.to_blob { self.format = 'miff' }
|
90
|
-
blue_stroke = Magick::Image.from_blob(s).first
|
91
|
-
|
92
|
-
draw.affine = Magick::AffineMatrix.new(1, 2, 3, 4, 5, 6)
|
93
|
-
draw.decorate = Magick::LineThroughDecoration
|
94
|
-
draw.encoding = 'AdobeCustom'
|
95
|
-
draw.gravity = Magick::CenterGravity
|
96
|
-
draw.fill = Magick::Pixel.from_color('red')
|
97
|
-
draw.stroke = Magick::Pixel.from_color('blue')
|
98
|
-
draw.stroke_width = 5
|
99
|
-
draw.fill_pattern = granite
|
100
|
-
draw.stroke_pattern = blue_stroke
|
101
|
-
draw.text_antialias = true
|
102
|
-
draw.font = 'Arial-Bold'
|
103
|
-
draw.font_family = 'arial'
|
104
|
-
draw.font_style = Magick::ItalicStyle
|
105
|
-
draw.font_stretch = Magick::CondensedStretch
|
106
|
-
draw.font_weight = Magick::BoldWeight
|
107
|
-
draw.pointsize = 12
|
108
|
-
draw.density = '72x72'
|
109
|
-
draw.align = Magick::CenterAlign
|
110
|
-
draw.undercolor = Magick::Pixel.from_color('green')
|
111
|
-
draw.kerning = 10.5
|
112
|
-
draw.interword_spacing = 3.75
|
113
|
-
|
114
|
-
draw.circle(20, 25, 20, 28)
|
115
|
-
dumped = nil
|
116
|
-
expect { dumped = Marshal.dump(draw) }.not_to raise_error
|
117
|
-
expect { Marshal.load(dumped) }.not_to raise_error
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe '#fill_pattern' do
|
122
|
-
it 'accepts an Image argument' do
|
123
|
-
img = Magick::Image.new(20,20)
|
124
|
-
expect { draw.fill_pattern = img }.not_to raise_error
|
125
|
-
end
|
126
|
-
|
127
|
-
it 'accepts an ImageList argument' do
|
128
|
-
img = Magick::Image.new(20,20)
|
129
|
-
ilist = Magick::ImageList.new
|
130
|
-
ilist << img
|
131
|
-
expect { draw.fill_pattern = ilist }.not_to raise_error
|
132
|
-
end
|
133
|
-
|
134
|
-
it 'does not accept arbitrary arguments' do
|
135
|
-
expect { draw.fill_pattern = 1 }.to raise_error(NoMethodError)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
describe '#stroke_pattern' do
|
140
|
-
it 'accepts an Image argument' do
|
141
|
-
img = Magick::Image.new(20,20)
|
142
|
-
expect { draw.stroke_pattern = img }.not_to raise_error
|
143
|
-
end
|
144
|
-
|
145
|
-
it 'accepts an ImageList argument' do
|
146
|
-
img = Magick::Image.new(20,20)
|
147
|
-
ilist = Magick::ImageList.new
|
148
|
-
ilist << img
|
149
|
-
expect { draw.stroke_pattern = ilist }.not_to raise_error
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'does not accept arbitrary arguments' do
|
153
|
-
expect { draw.stroke_pattern = 1 }.to raise_error(NoMethodError)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
RSpec.describe Magick::Image, '#blue_shift' do
|
2
|
-
|
3
|
-
let(:img) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
|
4
|
-
|
5
|
-
it 'returns a new Image' do
|
6
|
-
res = img.blue_shift
|
7
|
-
expect(res).to be_instance_of(Magick::Image)
|
8
|
-
expect(res).not_to eq img
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'accepts one argument' do
|
12
|
-
expect { img.blue_shift(2) }.not_to raise_error
|
13
|
-
expect { img.blue_shift(2, 3) }.to raise_error(ArgumentError)
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
@@ -1,140 +0,0 @@
|
|
1
|
-
RSpec.describe Magick::Image, '#composite' do
|
2
|
-
|
3
|
-
let(:img1) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
|
4
|
-
let(:img2) { Magick::Image.read(IMAGES_DIR+'/Button_1.gif').first }
|
5
|
-
let(:composite_ops) do
|
6
|
-
[
|
7
|
-
Magick::UndefinedCompositeOp,
|
8
|
-
Magick::NoCompositeOp,
|
9
|
-
Magick::AddCompositeOp,
|
10
|
-
Magick::AtopCompositeOp,
|
11
|
-
Magick::BumpmapCompositeOp,
|
12
|
-
Magick::ClearCompositeOp,
|
13
|
-
Magick::ColorizeCompositeOp,
|
14
|
-
Magick::CopyBlueCompositeOp,
|
15
|
-
Magick::CopyCompositeOp,
|
16
|
-
Magick::CopyGreenCompositeOp,
|
17
|
-
Magick::CopyOpacityCompositeOp,
|
18
|
-
Magick::CopyRedCompositeOp,
|
19
|
-
Magick::CopyCyanCompositeOp,
|
20
|
-
Magick::CopyMagentaCompositeOp,
|
21
|
-
Magick::CopyYellowCompositeOp,
|
22
|
-
Magick::CopyBlackCompositeOp,
|
23
|
-
Magick::DarkenCompositeOp,
|
24
|
-
Magick::DifferenceCompositeOp,
|
25
|
-
Magick::DisplaceCompositeOp,
|
26
|
-
Magick::DissolveCompositeOp,
|
27
|
-
Magick::DstAtopCompositeOp,
|
28
|
-
Magick::DstCompositeOp,
|
29
|
-
Magick::DstInCompositeOp,
|
30
|
-
Magick::DstOutCompositeOp,
|
31
|
-
Magick::DstOverCompositeOp,
|
32
|
-
Magick::HueCompositeOp,
|
33
|
-
Magick::InCompositeOp,
|
34
|
-
Magick::LightenCompositeOp,
|
35
|
-
Magick::LuminizeCompositeOp,
|
36
|
-
Magick::MinusCompositeOp,
|
37
|
-
Magick::ModulateCompositeOp,
|
38
|
-
Magick::MultiplyCompositeOp,
|
39
|
-
Magick::OutCompositeOp,
|
40
|
-
Magick::OverCompositeOp,
|
41
|
-
Magick::OverlayCompositeOp,
|
42
|
-
Magick::PlusCompositeOp,
|
43
|
-
Magick::ReplaceCompositeOp,
|
44
|
-
Magick::SaturateCompositeOp,
|
45
|
-
Magick::ScreenCompositeOp,
|
46
|
-
Magick::SrcAtopCompositeOp,
|
47
|
-
Magick::SrcCompositeOp,
|
48
|
-
Magick::SrcInCompositeOp,
|
49
|
-
Magick::SrcOutCompositeOp,
|
50
|
-
Magick::SrcOverCompositeOp,
|
51
|
-
Magick::SubtractCompositeOp,
|
52
|
-
Magick::ThresholdCompositeOp,
|
53
|
-
Magick::XorCompositeOp,
|
54
|
-
Magick::BlendCompositeOp,
|
55
|
-
Magick::ColorBurnCompositeOp,
|
56
|
-
Magick::ColorDodgeCompositeOp,
|
57
|
-
Magick::ExclusionCompositeOp,
|
58
|
-
Magick::HardLightCompositeOp,
|
59
|
-
Magick::SoftLightCompositeOp
|
60
|
-
]
|
61
|
-
end
|
62
|
-
let(:gravity) do
|
63
|
-
[
|
64
|
-
Magick::NorthEastGravity,
|
65
|
-
Magick::EastGravity,
|
66
|
-
Magick::SouthWestGravity,
|
67
|
-
Magick::SouthGravity,
|
68
|
-
Magick::SouthEastGravity
|
69
|
-
]
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'raises an error given invalid arguments' do
|
73
|
-
expect { img1.composite }.to raise_error(ArgumentError)
|
74
|
-
expect { img1.composite(img2) }.to raise_error(ArgumentError)
|
75
|
-
expect do
|
76
|
-
img1.composite(img2, Magick::NorthWestGravity)
|
77
|
-
end.to raise_error(ArgumentError)
|
78
|
-
expect { img1.composite(2) }.to raise_error(ArgumentError)
|
79
|
-
expect { img1.composite(img2, 2) }.to raise_error(ArgumentError)
|
80
|
-
end
|
81
|
-
|
82
|
-
context 'when given 3 arguments' do
|
83
|
-
it 'works when 2nd argument is a gravity' do
|
84
|
-
composite_ops.each do |op|
|
85
|
-
gravity.each do |grav|
|
86
|
-
expect { img1.composite(img2, grav, op) }.not_to raise_error
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'raises an error when 2nd argument is not a gravity' do
|
92
|
-
expect do
|
93
|
-
img1.composite(img2, 2, Magick::OverCompositeOp)
|
94
|
-
end.to raise_error(TypeError)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'when given 4 arguments' do
|
99
|
-
it 'works when 4th argument is a composite operator' do
|
100
|
-
# there are way too many CompositeOperators to test them all, so just try
|
101
|
-
# few representative ops
|
102
|
-
composite_ops.each do |op|
|
103
|
-
expect { img1.composite(img2, 0, 0, op) }.not_to raise_error
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'returns a new Magick::Image object' do
|
108
|
-
res = img1.composite(img2, 0, 0, Magick::OverCompositeOp)
|
109
|
-
expect(res).to be_instance_of(Magick::Image)
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'raises an error when 4th argument is not a composite operator' do
|
113
|
-
expect { img1.composite(img2, 0, 0, 2) }.to raise_error(TypeError)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
context 'when given 5 arguments' do
|
118
|
-
it 'works when 2nd argument is gravity and 5th is a composite operator' do
|
119
|
-
composite_ops.each do |op|
|
120
|
-
gravity.each do |grav|
|
121
|
-
expect { img1.composite(img2, grav, 0, 0, op) }.not_to raise_error
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'raises an error when 2nd argument is not a gravity' do
|
127
|
-
expect do
|
128
|
-
img1.composite(img2, 0, 0, 2, Magick::OverCompositeOp)
|
129
|
-
end.to raise_error(TypeError)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'raises an error when the image has been destroyed' do
|
134
|
-
img2.destroy!
|
135
|
-
expect do
|
136
|
-
img1.composite(img2, Magick::CenterGravity, Magick::OverCompositeOp)
|
137
|
-
end.to raise_error(Magick::DestroyedImageError)
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
RSpec.describe Magick::Image, '#constitute' do
|
2
|
-
|
3
|
-
let(:img) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
|
4
|
-
let(:pixels) { img.dispatch(0, 0, img.columns, img.rows, 'RGBA') }
|
5
|
-
|
6
|
-
it 'returns an equivalent image to the given pixels' do
|
7
|
-
res = Magick::Image.constitute(img.columns, img.rows, 'RGBA', pixels)
|
8
|
-
# The constituted image is in MIFF format so we
|
9
|
-
# can't compare it directly to the original image.
|
10
|
-
expect(res.columns).to eq img.columns
|
11
|
-
expect(res.rows).to eq img.rows
|
12
|
-
expect(pixels.all? { |v| 0 <= v && v <= Magick::QuantumRange }).to be true
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
RSpec.describe Magick::Image, '#dispatch' do
|
2
|
-
|
3
|
-
let(:img) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
|
4
|
-
|
5
|
-
it 'expects exactly 5 or 6 arguments' do
|
6
|
-
expect { img.dispatch }.to raise_error(ArgumentError)
|
7
|
-
expect { img.dispatch(0) }.to raise_error(ArgumentError)
|
8
|
-
expect { img.dispatch(0, 0) }.to raise_error(ArgumentError)
|
9
|
-
expect { img.dispatch(0, 0, img.columns) }.to raise_error(ArgumentError)
|
10
|
-
expect do
|
11
|
-
img.dispatch(0, 0, img.columns, img.rows)
|
12
|
-
end.to raise_error(ArgumentError)
|
13
|
-
expect do
|
14
|
-
img.dispatch(0, 0, 20, 20, 'RGBA', false, false)
|
15
|
-
end.to raise_error(ArgumentError)
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
RSpec.describe Magick::Image, '#from_blob' do
|
2
|
-
|
3
|
-
let(:img) { Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first }
|
4
|
-
let(:blob) { img.to_blob }
|
5
|
-
|
6
|
-
it 'returns an image equal to the original' do
|
7
|
-
expect(blob).to be_instance_of(String)
|
8
|
-
res = Magick::Image.from_blob(blob)
|
9
|
-
expect(res).to be_instance_of(Array)
|
10
|
-
expect(res.first).to be_instance_of(Magick::Image)
|
11
|
-
expect(res.first).to eq img
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
RSpec.describe Magick::Image, '#ping' do
|
2
|
-
|
3
|
-
it 'returns an image from the source, omitting pixel data' do
|
4
|
-
res = Magick::Image.ping(IMAGES_DIR+'/Button_0.gif')
|
5
|
-
expect(res).to be_instance_of(Array)
|
6
|
-
image = res.first
|
7
|
-
expect(image).to be_instance_of(Magick::Image)
|
8
|
-
expect(image.format).to eq 'GIF'
|
9
|
-
expect(image.columns).to eq 127
|
10
|
-
expect(image.rows).to eq 120
|
11
|
-
expect(image.filename).to match(/Button_0.gif/)
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
RSpec.describe Magick::Image, '#properties' do
|
2
|
-
|
3
|
-
let(:img) { Magick::Image.new(20, 20) }
|
4
|
-
let(:freeze_error) { RUBY_VERSION[/^1\.9|^2/] ? RuntimeError : TypeError }
|
5
|
-
|
6
|
-
before(:each) do
|
7
|
-
img['a'] = 'str_1'
|
8
|
-
img['b'] = 'str_2'
|
9
|
-
img['c'] = 'str_3'
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'allows assignment of arbitrary properties' do
|
13
|
-
expect(img['a']).to eq 'str_1'
|
14
|
-
expect(img['b']).to eq 'str_2'
|
15
|
-
expect(img['c']).to eq 'str_3'
|
16
|
-
expect(img['d']).to be nil
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'returns a hash of assigned properties' do
|
20
|
-
expected_properties = { 'a' => 'str_1', 'b' => 'str_2', 'c' => 'str_3' }
|
21
|
-
expect(img.properties).to eq(expected_properties)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'raises an error when trying to assign properties to a frozen image' do
|
25
|
-
img.freeze
|
26
|
-
expect { img['d'] = 'str_4' }.to raise_error(freeze_error)
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
data/spec/spec_helper.rb
DELETED