rmagick 1.7.1
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.
- data/ChangeLog +232 -0
- data/Makefile.in +28 -0
- data/README.html +404 -0
- data/README.txt +397 -0
- data/configure +8554 -0
- data/configure.ac +497 -0
- data/doc/comtasks.html +241 -0
- data/doc/constants.html +1195 -0
- data/doc/css/doc.css +299 -0
- data/doc/css/popup.css +34 -0
- data/doc/draw.html +3108 -0
- data/doc/ex/Adispatch.rb +43 -0
- data/doc/ex/Zconstitute.rb +9 -0
- data/doc/ex/adaptive_threshold.rb +19 -0
- data/doc/ex/add_noise.rb +18 -0
- data/doc/ex/affine.rb +48 -0
- data/doc/ex/affine_transform.rb +20 -0
- data/doc/ex/arc.rb +47 -0
- data/doc/ex/arcpath.rb +33 -0
- data/doc/ex/average.rb +15 -0
- data/doc/ex/axes.rb +64 -0
- data/doc/ex/bilevel_channel.rb +20 -0
- data/doc/ex/blur_image.rb +12 -0
- data/doc/ex/border.rb +10 -0
- data/doc/ex/bounding_box.rb +48 -0
- data/doc/ex/cbezier1.rb +40 -0
- data/doc/ex/cbezier2.rb +40 -0
- data/doc/ex/cbezier3.rb +40 -0
- data/doc/ex/cbezier4.rb +41 -0
- data/doc/ex/cbezier5.rb +41 -0
- data/doc/ex/cbezier6.rb +51 -0
- data/doc/ex/channel.rb +26 -0
- data/doc/ex/channel_threshold.rb +48 -0
- data/doc/ex/charcoal.rb +12 -0
- data/doc/ex/chop.rb +29 -0
- data/doc/ex/circle.rb +31 -0
- data/doc/ex/clip_path.rb +56 -0
- data/doc/ex/coalesce.rb +60 -0
- data/doc/ex/color_fill_to_border.rb +29 -0
- data/doc/ex/color_floodfill.rb +28 -0
- data/doc/ex/color_histogram.rb +60 -0
- data/doc/ex/color_reset.rb +11 -0
- data/doc/ex/colorize.rb +16 -0
- data/doc/ex/colors.rb +65 -0
- data/doc/ex/composite.rb +135 -0
- data/doc/ex/contrast.rb +37 -0
- data/doc/ex/crop.rb +31 -0
- data/doc/ex/crop_with_gravity.rb +46 -0
- data/doc/ex/cycle_colormap.rb +21 -0
- data/doc/ex/demo.rb +324 -0
- data/doc/ex/drawcomp.rb +42 -0
- data/doc/ex/drop_shadow.rb +60 -0
- data/doc/ex/edge.rb +11 -0
- data/doc/ex/ellipse.rb +43 -0
- data/doc/ex/emboss.rb +11 -0
- data/doc/ex/enhance.rb +28 -0
- data/doc/ex/equalize.rb +11 -0
- data/doc/ex/flatten_images.rb +38 -0
- data/doc/ex/flip.rb +11 -0
- data/doc/ex/flop.rb +11 -0
- data/doc/ex/fonts.rb +20 -0
- data/doc/ex/frame.rb +12 -0
- data/doc/ex/gaussian_blur.rb +11 -0
- data/doc/ex/get_multiline_type_metrics.rb +53 -0
- data/doc/ex/get_pixels.rb +48 -0
- data/doc/ex/get_type_metrics.rb +140 -0
- data/doc/ex/gradientfill.rb +27 -0
- data/doc/ex/grav.rb +44 -0
- data/doc/ex/gravity.rb +80 -0
- data/doc/ex/hatchfill.rb +27 -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/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/Shorts.jpg +0 -0
- data/doc/ex/images/Snake.wmf +0 -0
- data/doc/ex/images/Violin.jpg +0 -0
- data/doc/ex/images/graydient230x6.gif +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 +32 -0
- data/doc/ex/level.rb +12 -0
- data/doc/ex/level_channel.rb +33 -0
- data/doc/ex/line.rb +40 -0
- data/doc/ex/map.rb +28 -0
- data/doc/ex/map_f.rb +15 -0
- data/doc/ex/matte_fill_to_border.rb +42 -0
- data/doc/ex/matte_floodfill.rb +35 -0
- data/doc/ex/matte_replace.rb +42 -0
- data/doc/ex/median_filter.rb +28 -0
- data/doc/ex/modulate.rb +11 -0
- data/doc/ex/mono.rb +23 -0
- data/doc/ex/morph.rb +26 -0
- data/doc/ex/mosaic.rb +35 -0
- data/doc/ex/motion_blur.rb +11 -0
- data/doc/ex/negate.rb +11 -0
- data/doc/ex/negate_channel.rb +19 -0
- data/doc/ex/normalize.rb +11 -0
- data/doc/ex/oil_paint.rb +11 -0
- data/doc/ex/opacity.rb +38 -0
- data/doc/ex/opaque.rb +14 -0
- data/doc/ex/ordered_dither.rb +11 -0
- data/doc/ex/path.rb +62 -0
- data/doc/ex/pattern1.rb +25 -0
- data/doc/ex/pattern2.rb +26 -0
- data/doc/ex/polygon.rb +24 -0
- data/doc/ex/polyline.rb +23 -0
- data/doc/ex/posterize.rb +19 -0
- data/doc/ex/preview.rb +16 -0
- data/doc/ex/qbezierpath.rb +49 -0
- data/doc/ex/quantize-m.rb +25 -0
- data/doc/ex/radial_blur.rb +19 -0
- data/doc/ex/raise.rb +11 -0
- data/doc/ex/random_channel_threshold.rb +17 -0
- data/doc/ex/random_threshold_channel.rb +18 -0
- data/doc/ex/rectangle.rb +33 -0
- data/doc/ex/reduce_noise.rb +28 -0
- data/doc/ex/roll.rb +9 -0
- data/doc/ex/rotate.rb +43 -0
- data/doc/ex/rotate_f.rb +14 -0
- data/doc/ex/roundrect.rb +32 -0
- data/doc/ex/rubyname.rb +31 -0
- data/doc/ex/segment.rb +11 -0
- data/doc/ex/shade.rb +11 -0
- data/doc/ex/shave.rb +15 -0
- data/doc/ex/shear.rb +10 -0
- data/doc/ex/skewx.rb +50 -0
- data/doc/ex/skewy.rb +45 -0
- data/doc/ex/smile.rb +124 -0
- data/doc/ex/solarize.rb +11 -0
- data/doc/ex/splice.rb +16 -0
- data/doc/ex/spread.rb +11 -0
- data/doc/ex/stegano.rb +50 -0
- data/doc/ex/stroke_dasharray.rb +41 -0
- data/doc/ex/stroke_linecap.rb +44 -0
- data/doc/ex/stroke_linejoin.rb +48 -0
- data/doc/ex/stroke_width.rb +47 -0
- data/doc/ex/swirl.rb +17 -0
- data/doc/ex/text.rb +32 -0
- data/doc/ex/text_align.rb +36 -0
- data/doc/ex/text_antialias.rb +33 -0
- data/doc/ex/text_undercolor.rb +26 -0
- data/doc/ex/texture_fill_to_border.rb +34 -0
- data/doc/ex/texture_floodfill.rb +31 -0
- data/doc/ex/texturefill.rb +25 -0
- data/doc/ex/threshold.rb +13 -0
- data/doc/ex/to_blob.rb +14 -0
- data/doc/ex/translate.rb +37 -0
- data/doc/ex/transparent.rb +38 -0
- data/doc/ex/trim.rb +25 -0
- data/doc/ex/unsharp_mask.rb +28 -0
- data/doc/ex/viewex.rb +36 -0
- data/doc/ex/wave.rb +9 -0
- data/doc/ilist.html +1592 -0
- data/doc/image1.html +3009 -0
- data/doc/image2.html +2169 -0
- data/doc/image3.html +2815 -0
- data/doc/imageattrs.html +1319 -0
- data/doc/imusage.html +403 -0
- data/doc/index.html +418 -0
- data/doc/info.html +949 -0
- data/doc/magick.html +439 -0
- data/doc/scripts/doc.js +9 -0
- data/doc/struct.html +1334 -0
- data/doc/usage.html +1318 -0
- data/examples/describe.rb +44 -0
- data/examples/histogram.rb +289 -0
- data/examples/image_opacity.rb +29 -0
- data/examples/import_export.rb +31 -0
- data/examples/pattern_fill.rb +38 -0
- data/examples/rotating_text.rb +47 -0
- data/examples/thumbnail.rb +65 -0
- data/examples/vignette.rb +79 -0
- data/ext/RMagick/MANIFEST +239 -0
- data/ext/RMagick/extconf.rb.in +21 -0
- data/ext/RMagick/rmagick.h +938 -0
- data/ext/RMagick/rmagick_config.h.in +170 -0
- data/ext/RMagick/rmdraw.c +1308 -0
- data/ext/RMagick/rmfill.c +609 -0
- data/ext/RMagick/rmilist.c +685 -0
- data/ext/RMagick/rmimage.c +7980 -0
- data/ext/RMagick/rminfo.c +982 -0
- data/ext/RMagick/rmmain.c +1497 -0
- data/ext/RMagick/rmutil.c +2685 -0
- data/install.rb +1015 -0
- data/lib/RMagick.rb +1486 -0
- data/metaconfig.in +6 -0
- data/post-clean.rb +12 -0
- data/post-install.rb +36 -0
- data/post-setup.rb +245 -0
- data/rmagick.gemspec +22 -0
- data/uninstall.rb +71 -0
- metadata +286 -0
data/doc/ex/Adispatch.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
f = Magick::Image.read("images/Flower_Hat.jpg").first
|
5
|
+
|
6
|
+
pixels = f.dispatch(0,0,f.columns,f.rows,"RGB")
|
7
|
+
|
8
|
+
# Write the pixels to a file, to be loaded in the Zconstitute.rb
|
9
|
+
# example. Ruby 1.6.8 # loads the Pixels array much faster if we break
|
10
|
+
# the array into many small pieces and concatenate them together, so this
|
11
|
+
# program generates such a sequence.
|
12
|
+
|
13
|
+
first = true
|
14
|
+
total = pixels.length
|
15
|
+
|
16
|
+
File.open('pixels-array', 'w') { |txt|
|
17
|
+
txt.puts("Width = #{f.columns}")
|
18
|
+
txt.puts("Height = #{f.rows}")
|
19
|
+
txt.puts('Pixels = [')
|
20
|
+
x = 0
|
21
|
+
pixels.each do |p|
|
22
|
+
txt.printf("%3d,", p)
|
23
|
+
x = x.succ
|
24
|
+
txt.printf("\n") if x % 25 == 0
|
25
|
+
if x % 1000 == 0
|
26
|
+
if first
|
27
|
+
txt.puts(']')
|
28
|
+
first = false
|
29
|
+
else
|
30
|
+
txt.puts('])')
|
31
|
+
end
|
32
|
+
txt.print('Pixels.concat([')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
if first
|
37
|
+
txt.puts(']')
|
38
|
+
first = false
|
39
|
+
else
|
40
|
+
txt.puts('])')
|
41
|
+
end
|
42
|
+
}
|
43
|
+
exit
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
# Demonstrate the Image#adaptive_threshold method
|
5
|
+
|
6
|
+
img = Magick::Image.read("images/Flower_Hat.jpg").first
|
7
|
+
|
8
|
+
begin
|
9
|
+
result = img.adaptive_threshold
|
10
|
+
|
11
|
+
# Substitute the standard "Not Implemented" image
|
12
|
+
rescue NotImplementedError
|
13
|
+
result = Magick::Image.read("images/notimplemented.gif").first
|
14
|
+
result.resize!(img.columns, img.rows)
|
15
|
+
end
|
16
|
+
|
17
|
+
result.write("adaptive_threshold.jpg")
|
18
|
+
exit
|
19
|
+
|
data/doc/ex/add_noise.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
include Magick
|
4
|
+
|
5
|
+
# Demonstrate the Image#add_noise method
|
6
|
+
NOISE_TYPES = [UniformNoise, GaussianNoise,
|
7
|
+
MultiplicativeGaussianNoise,
|
8
|
+
ImpulseNoise, LaplacianNoise,
|
9
|
+
PoissonNoise]
|
10
|
+
|
11
|
+
img = Magick::Image.read('images/Flower_Hat.jpg').first
|
12
|
+
|
13
|
+
NOISE_TYPES.each do |noise|
|
14
|
+
copy = img.add_noise(noise)
|
15
|
+
copy.write "add_noise_#{noise.to_s}.jpg"
|
16
|
+
|
17
|
+
end
|
18
|
+
exit
|
data/doc/ex/affine.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
# Demonstrate the affine primitive. Transform the
|
5
|
+
# coordinate space to put the origin in the lower
|
6
|
+
# left corner.
|
7
|
+
|
8
|
+
imgl = Magick::ImageList.new
|
9
|
+
imgl.new_image 200, 200, Magick::HatchFill.new('white','lightcyan2')
|
10
|
+
|
11
|
+
gc = Magick::Draw.new
|
12
|
+
|
13
|
+
max_x = imgl.columns
|
14
|
+
max_y = imgl.rows
|
15
|
+
|
16
|
+
# Translate the y origin to the bottom of the window.
|
17
|
+
# Invert the y points by scaling by -1. Combine the
|
18
|
+
# two operations using the affine method. That is, the
|
19
|
+
# affine method is equivalent to:
|
20
|
+
# gc.translate 0, max_y
|
21
|
+
# gc.scale 1, -1
|
22
|
+
gc.affine(1, 0, 0, -1, 0, max_y)
|
23
|
+
gc.stroke('gray50')
|
24
|
+
gc.fill('gray50')
|
25
|
+
gc.stroke_width(1)
|
26
|
+
|
27
|
+
# Draw up-pointing arrow.
|
28
|
+
gc.polyline(10, 10, 10, max_y-10, 5, max_y-15, 15, max_y-15, 10, max_y-10)
|
29
|
+
|
30
|
+
# Draw right-pointing arrow
|
31
|
+
gc.polyline(10, 10, max_x-10, 10, max_x-15, 5, max_x-15, 15, max_x-10, 10)
|
32
|
+
|
33
|
+
gc.draw(imgl)
|
34
|
+
|
35
|
+
# Add labels. Use a different graphics context with a "normal"
|
36
|
+
# coordinate system so the text isn't inverted.
|
37
|
+
text_gc = Magick::Draw.new
|
38
|
+
text_gc.pointsize(14)
|
39
|
+
text_gc.font_weight(Magick::NormalWeight)
|
40
|
+
text_gc.stroke('transparent')
|
41
|
+
text_gc.text(15, max_y-15, "'0,0'")
|
42
|
+
text_gc.text(max_x-20, max_y-16, "'+x'")
|
43
|
+
text_gc.text(12, 15, "'+y'")
|
44
|
+
text_gc.draw(imgl)
|
45
|
+
|
46
|
+
imgl.border!(1, 1, "lightcyan2")
|
47
|
+
|
48
|
+
imgl.write("affine.gif")
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
# Demonstrate the Image#affine_transform method
|
5
|
+
|
6
|
+
# Construct a simple affine matrix
|
7
|
+
flipflop = Magick::AffineMatrix.new(-1, Math::PI/6, Math::PI/6, -1, 0, 0)
|
8
|
+
|
9
|
+
img = Magick::Image.read("images/Flower_Hat.jpg").first
|
10
|
+
|
11
|
+
# Apply the transform
|
12
|
+
img = img.affine_transform(flipflop)
|
13
|
+
|
14
|
+
# Scale the image, make the background transparent,
|
15
|
+
# and write it to a JPEG file.
|
16
|
+
img.scale!(250.0/img.rows)
|
17
|
+
img = img.matte_replace(0,0)
|
18
|
+
img.write("affine_transform.jpg")
|
19
|
+
|
20
|
+
exit
|
data/doc/ex/arc.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
i = Magick::Image.new(300, 220, Magick::HatchFill.new("white","lightcyan2"))
|
5
|
+
gc = Magick::Draw.new
|
6
|
+
|
7
|
+
# Draw the border rectangle.
|
8
|
+
gc.fill_opacity(0)
|
9
|
+
gc.stroke_width(1)
|
10
|
+
gc.stroke('gray50')
|
11
|
+
gc.rectangle(40, 50, 250, 180)
|
12
|
+
|
13
|
+
# Draw the circles around the rectangle corners and
|
14
|
+
# arc endpoints. All the circles have a 3-pixel radius.
|
15
|
+
gc.circle(40, 50, 40+3, 50)
|
16
|
+
gc.circle(250, 180, 250+3, 180)
|
17
|
+
gc.circle(250, 114, 250+3, 114)
|
18
|
+
gc.circle(146, 50, 146+3, 50)
|
19
|
+
|
20
|
+
# Annotate
|
21
|
+
gc.stroke('transparent')
|
22
|
+
gc.fill("black")
|
23
|
+
gc.fill_opacity(1)
|
24
|
+
|
25
|
+
# xMagick recognizes the braces as delimiters.
|
26
|
+
gc.gravity(Magick::NorthWestGravity)
|
27
|
+
gc.text(43, 45, "{40, 50}")
|
28
|
+
gc.text(195, 118, "{0 degrees}")
|
29
|
+
|
30
|
+
gc.gravity(Magick::SouthEastGravity)
|
31
|
+
gc.text(300-250, 220-195, "{250, 180}")
|
32
|
+
|
33
|
+
gc.gravity(Magick::NorthGravity)
|
34
|
+
gc.text(0, 67, "{270 degrees}")
|
35
|
+
|
36
|
+
# Draw the arc
|
37
|
+
gc.fill_opacity(0)
|
38
|
+
gc.stroke('red').stroke_width(3)
|
39
|
+
gc.arc(40, 50, 250,180, 0, 270)
|
40
|
+
|
41
|
+
# Draw on the canvas
|
42
|
+
gc.draw(i)
|
43
|
+
|
44
|
+
i.border!(1,1, "lightcyan2")
|
45
|
+
|
46
|
+
#i.display
|
47
|
+
i.write("arc.gif")
|
data/doc/ex/arcpath.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
# Demonstrate the "path" drawing primitive.
|
5
|
+
|
6
|
+
imgl = Magick::ImageList.new
|
7
|
+
imgl.new_image(450, 200, Magick::HatchFill.new('white','lightcyan2'))
|
8
|
+
|
9
|
+
gc = Magick::Draw.new
|
10
|
+
|
11
|
+
# Draw "pie chart"
|
12
|
+
gc.fill('red')
|
13
|
+
gc.stroke('blue')
|
14
|
+
gc.stroke_width(2)
|
15
|
+
gc.path('M110,100 h-75 a75,75 0 1,0 75,-75 z')
|
16
|
+
gc.fill('yellow')
|
17
|
+
gc.path('M97.5,87.5 v-75 a75,75 0 0,0 -75,75 z')
|
18
|
+
|
19
|
+
# Draw wiggly line
|
20
|
+
gc.fill_opacity(0)
|
21
|
+
gc.stroke('#00cd00')
|
22
|
+
gc.stroke_width(3)
|
23
|
+
gc.path('M200,175 l 25,-12.5 ' +
|
24
|
+
'a12.5,12.5 -15 0,1 25,-12.5 l 25,-12.5 ' +
|
25
|
+
'a12.5,25 -15 0,1 25,-12.5 l 25,-12.5 ' +
|
26
|
+
'a12.5,37.5 -15 0,1 25,-12.5 l 25,-12.5 ' +
|
27
|
+
'a12.5,50 -15 0,1 25,-12.5 l 25,-12.5')
|
28
|
+
|
29
|
+
gc.draw imgl
|
30
|
+
imgl.border!(1,1, "lightcyan2")
|
31
|
+
|
32
|
+
imgl.write('arcpath.gif')
|
33
|
+
|
data/doc/ex/average.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
# Demonstrate ImageList#average method
|
3
|
+
require 'RMagick'
|
4
|
+
|
5
|
+
images = Magick::ImageList.new("images/Button_A.gif", "images/Button_B.gif", "images/Button_C.gif")
|
6
|
+
|
7
|
+
group = images.append false
|
8
|
+
group.compression = Magick::LZWCompression
|
9
|
+
group.write "average_before.gif"
|
10
|
+
|
11
|
+
average_image = images.average
|
12
|
+
|
13
|
+
average_image.compression = Magick::LZWCompression
|
14
|
+
average_image.write "average_after.gif"
|
15
|
+
exit
|
data/doc/ex/axes.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
#!/usr/local/bin/ruby -w
|
2
|
+
|
3
|
+
require 'RMagick'
|
4
|
+
|
5
|
+
# Demonstrate the use of RMagick's Draw class
|
6
|
+
# and show the default coordinate system.
|
7
|
+
|
8
|
+
# Create a canvas to draw on. Use the HatchFill class to
|
9
|
+
# cross-hatch the background with light gray lines every 10 pixels.
|
10
|
+
canvas = Magick::ImageList.new
|
11
|
+
canvas.new_image(250, 250, Magick::HatchFill.new('white', 'gray90'))
|
12
|
+
|
13
|
+
# Draw a border around the edges of the canvas.
|
14
|
+
border = Magick::Draw.new
|
15
|
+
border.stroke('thistle')
|
16
|
+
border.fill_opacity(0)
|
17
|
+
border.rectangle(0,0, canvas.rows-1, canvas.columns-1)
|
18
|
+
border.draw(canvas)
|
19
|
+
|
20
|
+
# Draw gold axes with arrow-heads.
|
21
|
+
axes = Magick::Draw.new
|
22
|
+
axes.fill_opacity(0)
|
23
|
+
axes.stroke('gold3')
|
24
|
+
axes.stroke_width(4)
|
25
|
+
axes.stroke_linecap('round')
|
26
|
+
axes.stroke_linejoin('round')
|
27
|
+
axes.polyline(18,canvas.rows-10, 10,canvas.rows-3, 3,canvas.rows-10,
|
28
|
+
10,canvas.rows-10, 10,10, canvas.columns-10,10,
|
29
|
+
canvas.columns-10,3, canvas.columns-3,10, canvas.columns-10, 18)
|
30
|
+
axes.draw(canvas)
|
31
|
+
|
32
|
+
# Draw a red circle to show the direction of rotation.
|
33
|
+
# Make it slightly transparent so the hatching will show through.
|
34
|
+
circle = Magick::Draw.new
|
35
|
+
circle.stroke('tomato')
|
36
|
+
circle.fill_opacity(0)
|
37
|
+
circle.stroke_opacity(0.75)
|
38
|
+
circle.stroke_width(6)
|
39
|
+
circle.stroke_linecap('round')
|
40
|
+
circle.stroke_linejoin('round')
|
41
|
+
circle.ellipse(canvas.rows/2,canvas.columns/2, 80, 80, 0, 315)
|
42
|
+
circle.polyline(180,70, 173,78, 190,78, 191,62)
|
43
|
+
circle.draw(canvas)
|
44
|
+
|
45
|
+
# Label the axes and the circle.
|
46
|
+
labels = Magick::Draw.new
|
47
|
+
labels.fill('black')
|
48
|
+
labels.stroke('transparent')
|
49
|
+
labels.font_family('helvetica')
|
50
|
+
labels.font_style(Magick::ItalicStyle)
|
51
|
+
labels.pointsize(14)
|
52
|
+
labels.gravity(Magick::NorthWestGravity)
|
53
|
+
labels.text(20,30, "'0,0'")
|
54
|
+
labels.gravity(Magick::NorthEastGravity)
|
55
|
+
labels.text(20,30, "'+x'")
|
56
|
+
labels.gravity(Magick::SouthWestGravity)
|
57
|
+
labels.text(20,20, "'+y'")
|
58
|
+
labels.gravity(Magick::CenterGravity)
|
59
|
+
labels.text(0,0, "Rotation")
|
60
|
+
labels.draw(canvas)
|
61
|
+
|
62
|
+
#canvas.display
|
63
|
+
canvas.write("axes.gif")
|
64
|
+
exit
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
|
3
|
+
require 'RMagick'
|
4
|
+
include Magick
|
5
|
+
|
6
|
+
img = Image.read('images/Flower_Hat.jpg').first
|
7
|
+
|
8
|
+
begin
|
9
|
+
|
10
|
+
result = img.bilevel_channel(2*MaxRGB/3, RedChannel)
|
11
|
+
|
12
|
+
# Substitute the standard "Not Implemented" image
|
13
|
+
rescue NotImplementedError
|
14
|
+
result = Magick::Image.read("images/notimplemented.gif").first
|
15
|
+
result.resize!(img.columns, img.rows)
|
16
|
+
end
|
17
|
+
|
18
|
+
result.write('bilevel_channel.jpg')
|
19
|
+
exit
|
20
|
+
|
data/doc/ex/border.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
i = Magick::ImageList.new
|
5
|
+
i.new_image(200, 200) { self.background_color = "#ffffcc" }
|
6
|
+
|
7
|
+
# Draw a blue circle.
|
8
|
+
primitives = Magick::Draw.new
|
9
|
+
primitives.stroke_width 5
|
10
|
+
primitives.stroke "blue"
|
11
|
+
primitives.fill_opacity 0
|
12
|
+
primitives.circle 100,100, 100,150
|
13
|
+
primitives.draw i
|
14
|
+
|
15
|
+
# Get the bounding box. Use the values to draw
|
16
|
+
# a gray square surrounding the circle. Highlight
|
17
|
+
# the corners with tiny red circles.
|
18
|
+
|
19
|
+
bb = i.bounding_box
|
20
|
+
primitives = Magick::Draw.new
|
21
|
+
primitives.stroke "gray50"
|
22
|
+
primitives.fill_opacity 0
|
23
|
+
primitives.rectangle bb.x, bb.y, bb.x+bb.width, bb.y+bb.height
|
24
|
+
primitives.stroke "red"
|
25
|
+
primitives.circle bb.x, bb.y, bb.x+2, bb.y+2
|
26
|
+
primitives.circle bb.x+bb.width, bb.y, bb.x+bb.width+2, bb.y+2
|
27
|
+
primitives.circle bb.x, bb.y+bb.height, bb.x+2, bb.y+bb.height+2
|
28
|
+
primitives.circle bb.x+bb.width, bb.y+bb.height, bb.x+bb.width+2, bb.y+bb.height+2
|
29
|
+
|
30
|
+
|
31
|
+
primitives.pointsize 10
|
32
|
+
primitives.fill "black"
|
33
|
+
primitives.stroke "transparent"
|
34
|
+
primitives.gravity Magick::NorthWestGravity
|
35
|
+
primitives.text bb.x-15, bb.y-5, "\'#{bb.x},#{bb.y}\'"
|
36
|
+
primitives.gravity Magick::NorthEastGravity
|
37
|
+
primitives.text bb.x-15, bb.y-5, "\'#{bb.x+bb.width},#{bb.y}\'"
|
38
|
+
primitives.gravity Magick::SouthWestGravity
|
39
|
+
primitives.text bb.x-15, bb.y-12, "\'#{bb.x},#{bb.y+bb.height}\'"
|
40
|
+
primitives.gravity Magick::SouthEastGravity
|
41
|
+
primitives.text bb.x-15, bb.y-12, "\'#{bb.x+bb.width},#{bb.y+bb.height}\'"
|
42
|
+
|
43
|
+
|
44
|
+
primitives.draw i
|
45
|
+
|
46
|
+
#i.display
|
47
|
+
i.write "bounding_box.gif"
|
48
|
+
exit
|
data/doc/ex/cbezier1.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
imgl = Magick::ImageList.new
|
5
|
+
imgl.new_image(390, 140, Magick::HatchFill.new('white','lightcyan2'))
|
6
|
+
gc = Magick::Draw.new
|
7
|
+
|
8
|
+
# Draw Bezier curve
|
9
|
+
gc.stroke('red')
|
10
|
+
gc.stroke_width(2)
|
11
|
+
gc.fill_opacity(0)
|
12
|
+
gc.bezier(20,120, 20,20, 320, 20, 320,120)
|
13
|
+
|
14
|
+
# Draw circles around endpoints
|
15
|
+
gc.fill_opacity(0)
|
16
|
+
gc.stroke('gray50').stroke_width(1)
|
17
|
+
gc.circle(20,120, 23, 123)
|
18
|
+
gc.circle(320,120, 323, 123)
|
19
|
+
|
20
|
+
# Draw filled circles around control points
|
21
|
+
gc.line(20,120, 20,20)
|
22
|
+
gc.line(320,120, 320,20)
|
23
|
+
gc.fill_opacity(1)
|
24
|
+
gc.fill('gray50')
|
25
|
+
gc.circle(20,20, 23,23)
|
26
|
+
gc.circle(320,20, 323,23)
|
27
|
+
|
28
|
+
# Annotate
|
29
|
+
gc.fill('black')
|
30
|
+
gc.stroke('transparent')
|
31
|
+
gc.text(27,120, "'20,120'")
|
32
|
+
gc.text(27,20, "'20,20'")
|
33
|
+
gc.text(327,120, "'320,120'")
|
34
|
+
gc.text(327,20, "'320,20'")
|
35
|
+
gc.draw(imgl)
|
36
|
+
|
37
|
+
imgl.border!(1, 1, "lightcyan2")
|
38
|
+
imgl.write('cbezier1.gif')
|
39
|
+
exit(0)
|
40
|
+
|