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
@@ -0,0 +1,21 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
# Demonstrate the Image#cycle_colormap method
|
5
|
+
|
6
|
+
balloons = Magick::Image.read('images/Hot_Air_Balloons.jpg').first
|
7
|
+
balloons = balloons.quantize(256, Magick::RGBColorspace)
|
8
|
+
|
9
|
+
jump = balloons.colors / 10
|
10
|
+
|
11
|
+
animation = Magick::ImageList.new
|
12
|
+
animation[0] = balloons
|
13
|
+
|
14
|
+
5.times { animation << animation.cycle_colormap(jump) }
|
15
|
+
4.times { animation << animation.cycle_colormap(-jump) }
|
16
|
+
|
17
|
+
animation.delay=20
|
18
|
+
animation.iterations = 10000
|
19
|
+
#animation.animate
|
20
|
+
animation.write('cycle_colormap.gif')
|
21
|
+
exit
|
data/doc/ex/demo.rb
ADDED
@@ -0,0 +1,324 @@
|
|
1
|
+
#!/usr/local/bin/ruby -w
|
2
|
+
#
|
3
|
+
# Simple demo program for RMagick
|
4
|
+
#
|
5
|
+
# Concept and algorithms lifted from Magick++ demo script written
|
6
|
+
# by Bob Friesenhahn.
|
7
|
+
#
|
8
|
+
require 'RMagick'
|
9
|
+
include Magick
|
10
|
+
|
11
|
+
#
|
12
|
+
# RMagick version of Magick++/demo/demo.cpp
|
13
|
+
#
|
14
|
+
|
15
|
+
Font = "Helvetica"
|
16
|
+
|
17
|
+
begin
|
18
|
+
puts "Read images..."
|
19
|
+
|
20
|
+
model = ImageList.new("images/model.miff")
|
21
|
+
model.border_color = "black"
|
22
|
+
model.background_color = "black"
|
23
|
+
model.cur_image[:Label] = "RMagick"
|
24
|
+
|
25
|
+
smile = ImageList.new("images/smile.miff")
|
26
|
+
smile.border_color = "black"
|
27
|
+
smile.cur_image[:Label] = "Smile"
|
28
|
+
|
29
|
+
#
|
30
|
+
# Create image stack
|
31
|
+
#
|
32
|
+
puts "Creating thumbnails"
|
33
|
+
|
34
|
+
# Construct an initial list containing five copies of a null
|
35
|
+
# image. This will give us room to fit the logo at the top.
|
36
|
+
# Notice I specify the width and height of the images via the
|
37
|
+
# optional "size" attribute in the parm block associated with
|
38
|
+
# the read method. There are two more examples of this, below.
|
39
|
+
example = ImageList.new
|
40
|
+
5.times { example.read("NULL:black") { self.size = "70x70"} }
|
41
|
+
|
42
|
+
puts " add noise..."
|
43
|
+
example << model.add_noise(LaplacianNoise)
|
44
|
+
example.cur_image[:Label] = "Add Noise"
|
45
|
+
|
46
|
+
puts " annotate..."
|
47
|
+
example << model.cur_image.copy
|
48
|
+
example.cur_image[:Label] = "Annotate"
|
49
|
+
draw = Draw.new
|
50
|
+
draw.annotate(example, 0, 0, 0, 20, "RMagick") {
|
51
|
+
self.pointsize = 18;
|
52
|
+
self.font = Font;
|
53
|
+
self.stroke = "gold"
|
54
|
+
self.fill = "gold"
|
55
|
+
self.gravity = NorthGravity
|
56
|
+
}
|
57
|
+
|
58
|
+
puts " blur..."
|
59
|
+
example << model.blur_image(0.0, 1.5)
|
60
|
+
example.cur_image[:Label] = "Blur"
|
61
|
+
|
62
|
+
puts " border..."
|
63
|
+
example << model.border(6, 6, "gold")
|
64
|
+
example.cur_image[:Label] = "Border"
|
65
|
+
|
66
|
+
puts " channel..."
|
67
|
+
example << model.channel(RedChannel)
|
68
|
+
example.cur_image[:Label] = "Channel"
|
69
|
+
|
70
|
+
puts " charcoal..."
|
71
|
+
example << model.charcoal
|
72
|
+
example.cur_image[:Label] = "Charcoal"
|
73
|
+
|
74
|
+
puts " composite..."
|
75
|
+
example << model.composite(smile, 35, 65, OverCompositeOp)
|
76
|
+
example.cur_image[:Label] = "Composite"
|
77
|
+
|
78
|
+
puts " contrast..."
|
79
|
+
example << model.contrast(false)
|
80
|
+
example.cur_image[:Label] = "Contrast"
|
81
|
+
|
82
|
+
puts " convolve..."
|
83
|
+
kernel = [ 1, 1, 1, 1, 4, 1, 1, 1, 1 ]
|
84
|
+
example << model.convolve(3, kernel)
|
85
|
+
example.cur_image[:Label] = "Convolve"
|
86
|
+
|
87
|
+
puts " crop..."
|
88
|
+
example << model.crop(25, 50, 80, 80)
|
89
|
+
example.cur_image[:Label] = "Crop"
|
90
|
+
|
91
|
+
puts " despeckle..."
|
92
|
+
example << model.despeckle
|
93
|
+
example.cur_image[:Label] = "Despeckle"
|
94
|
+
|
95
|
+
puts " draw..."
|
96
|
+
example << model.cur_image.copy
|
97
|
+
example.cur_image[:Label] = "Draw"
|
98
|
+
gc = Draw.new
|
99
|
+
gc.fill "black"
|
100
|
+
gc.fill_opacity 0
|
101
|
+
gc.stroke "gold"
|
102
|
+
gc.stroke_width 2
|
103
|
+
gc.circle 60,90, 60,120
|
104
|
+
gc.draw(example)
|
105
|
+
|
106
|
+
puts " edge..."
|
107
|
+
example << model.edge(0)
|
108
|
+
example.cur_image[:Label] = "Detect Edges"
|
109
|
+
|
110
|
+
puts " emboss..."
|
111
|
+
example << model.emboss
|
112
|
+
example.cur_image[:Label] = "Emboss"
|
113
|
+
|
114
|
+
puts " equalize..."
|
115
|
+
example << model.equalize
|
116
|
+
example.cur_image[:Label] = "Equalize"
|
117
|
+
|
118
|
+
puts " explode..."
|
119
|
+
example << model.implode(-1)
|
120
|
+
example.background_color = "#000000ff"
|
121
|
+
example.cur_image[:Label] = "Explode"
|
122
|
+
|
123
|
+
puts " flip..."
|
124
|
+
example << model.flip
|
125
|
+
example.cur_image[:Label] = "Flip"
|
126
|
+
|
127
|
+
puts " flop..."
|
128
|
+
example << model.flop
|
129
|
+
example.cur_image[:Label] = "Flop"
|
130
|
+
|
131
|
+
puts " frame..."
|
132
|
+
example << model.frame
|
133
|
+
example.cur_image[:Label] = "Frame"
|
134
|
+
|
135
|
+
puts " gamma..."
|
136
|
+
example << model.gamma_correct(1.6)
|
137
|
+
example.cur_image[:Label] = "Gamma"
|
138
|
+
|
139
|
+
puts " gaussian blur..."
|
140
|
+
example << model.gaussian_blur(1, 1.5)
|
141
|
+
example.cur_image[:Label] = "Gaussian Blur"
|
142
|
+
|
143
|
+
# To add an Image in one of ImageMagick's built-in formats,
|
144
|
+
# call the read method. The filename specifies the format and
|
145
|
+
# any parameters it needs. The gradient format can be created in
|
146
|
+
# any size. Specify the desired size by assigning it, in the form
|
147
|
+
# "WxH", to the optional "size" attribute in the block associated
|
148
|
+
# with the read method. Here we create a gradient image that is
|
149
|
+
# the same size as the model image.
|
150
|
+
puts " gradient..."
|
151
|
+
example.read("gradient:#20a0ff-#ffff00") {
|
152
|
+
self.size = Geometry.new(model.columns, model.rows)
|
153
|
+
}
|
154
|
+
example.cur_image[:Label] = "Gradient"
|
155
|
+
|
156
|
+
puts " grayscale..."
|
157
|
+
example << model.cur_image.quantize(256, GRAYColorspace)
|
158
|
+
example.cur_image[:Label] = "Grayscale"
|
159
|
+
|
160
|
+
puts " implode..."
|
161
|
+
example << model.implode(0.5)
|
162
|
+
example.cur_image[:Label] = "Implode"
|
163
|
+
|
164
|
+
puts " median filter..."
|
165
|
+
example << model.median_filter(0)
|
166
|
+
example.cur_image[:Label] = "Median Filter"
|
167
|
+
|
168
|
+
puts " modulate..."
|
169
|
+
example << model.modulate(1.10, 1.10, 1.10)
|
170
|
+
example.cur_image[:Label] = "Modulate"
|
171
|
+
|
172
|
+
puts " monochrome..."
|
173
|
+
example << model.cur_image.quantize(2, GRAYColorspace, false)
|
174
|
+
example.cur_image[:Label] = "Monochrome"
|
175
|
+
|
176
|
+
puts " negate..."
|
177
|
+
example << model.negate
|
178
|
+
example.cur_image[:Label] = "Negate"
|
179
|
+
|
180
|
+
puts " normalize..."
|
181
|
+
example << model.normalize
|
182
|
+
example.cur_image[:Label] = "Normalize"
|
183
|
+
|
184
|
+
puts " oil paint..."
|
185
|
+
example << model.oil_paint(3.0)
|
186
|
+
example.cur_image[:Label] = "Oil Paint"
|
187
|
+
|
188
|
+
# The plasma format is very similar to the gradient format, above.
|
189
|
+
puts " plasma..."
|
190
|
+
example.read("plasma:fractal") {
|
191
|
+
self.size = Geometry.new(model.columns, model.rows)
|
192
|
+
}
|
193
|
+
example.cur_image[:Label] = "Plasma"
|
194
|
+
|
195
|
+
puts " quantize..."
|
196
|
+
example << model.cur_image.quantize
|
197
|
+
example.cur_image[:Label] = "Quantize"
|
198
|
+
|
199
|
+
puts " raise..."
|
200
|
+
example << model.raise
|
201
|
+
example.cur_image[:Label] = "Raise"
|
202
|
+
|
203
|
+
puts " reduce noise..."
|
204
|
+
example << model.reduce_noise(3.0)
|
205
|
+
example.cur_image[:Label] = "Reduce Noise"
|
206
|
+
|
207
|
+
puts " resize..."
|
208
|
+
example << model.resize(0.50)
|
209
|
+
example.cur_image[:Label] = "Resize"
|
210
|
+
|
211
|
+
puts " roll..."
|
212
|
+
example << model.roll(20, 10)
|
213
|
+
example.cur_image[:Label] = "Roll"
|
214
|
+
|
215
|
+
puts " rotate..."
|
216
|
+
example << model.rotate(45).transparent("black")
|
217
|
+
example.cur_image[:Label] = "Rotate"
|
218
|
+
|
219
|
+
puts " scale..."
|
220
|
+
example << model.scale(0.60)
|
221
|
+
example.cur_image[:Label] = "Scale"
|
222
|
+
|
223
|
+
puts " segment..."
|
224
|
+
example << model.segment
|
225
|
+
example.cur_image[:Label] = "Segment"
|
226
|
+
|
227
|
+
puts " shade..."
|
228
|
+
example << model.shade(false, 30, 30)
|
229
|
+
example.cur_image[:Label] = "Shade"
|
230
|
+
|
231
|
+
puts " sharpen..."
|
232
|
+
example << model.sharpen(0.0, 1.0)
|
233
|
+
example.cur_image[:Label] = "Sharpen"
|
234
|
+
|
235
|
+
puts " shave..."
|
236
|
+
example << model.shave(10, 10)
|
237
|
+
example.cur_image[:Label] = "Shave"
|
238
|
+
|
239
|
+
puts " shear..."
|
240
|
+
example << model.shear(45, 45).transparent("black")
|
241
|
+
example.cur_image[:Label] = "Shear"
|
242
|
+
|
243
|
+
puts " spread..."
|
244
|
+
example << model.spread(3)
|
245
|
+
example.cur_image[:Label] = "Spread"
|
246
|
+
|
247
|
+
puts " solarize..."
|
248
|
+
example << model.solarize(50.0)
|
249
|
+
example.cur_image[:Label] = "Solarize"
|
250
|
+
|
251
|
+
puts " swirl..."
|
252
|
+
temp = model.copy
|
253
|
+
temp.background_color = "#000000ff"
|
254
|
+
example << temp.swirl(90)
|
255
|
+
example.cur_image[:Label] = "Swirl"
|
256
|
+
|
257
|
+
puts " unsharp mask..."
|
258
|
+
example << model.unsharp_mask(0.0, 1.0, 1.0, 0.05)
|
259
|
+
example.cur_image[:Label] = "Unsharp Mask"
|
260
|
+
|
261
|
+
puts " wave..."
|
262
|
+
temp = model.copy
|
263
|
+
temp.cur_image[:Label] = "Wave"
|
264
|
+
temp.matte = true
|
265
|
+
temp.background_color = "#000000ff"
|
266
|
+
example << temp.wave(25, 150)
|
267
|
+
|
268
|
+
#
|
269
|
+
# Create image montage - notice the optional
|
270
|
+
# montage parameters are supplied via a block
|
271
|
+
#
|
272
|
+
|
273
|
+
puts "Montage images..."
|
274
|
+
|
275
|
+
montage = example.montage {
|
276
|
+
self.geometry = "130x194+10+5>"
|
277
|
+
self.gravity = CenterGravity
|
278
|
+
self.border_width = 1
|
279
|
+
rows = (example.size + 4) / 5
|
280
|
+
self.tile = Geometry.new(5,rows)
|
281
|
+
self.compose = OverCompositeOp
|
282
|
+
|
283
|
+
# Use the ImageMagick built-in "granite" format
|
284
|
+
# as the background texture.
|
285
|
+
|
286
|
+
# self.texture = Image.read("granite:").first
|
287
|
+
self.background_color = "white"
|
288
|
+
self.font = Font;
|
289
|
+
self.pointsize = 18;
|
290
|
+
self.fill = "#600"
|
291
|
+
self.filename = "RMagick Demo"
|
292
|
+
# self.shadow = true
|
293
|
+
# self.frame = "20x20+4+4"
|
294
|
+
}
|
295
|
+
|
296
|
+
# Add the ImageMagick logo to the top of the montage. The "logo:"
|
297
|
+
# format is a fixed-size image, so I don't need to specify a size.
|
298
|
+
puts "Adding logo image..."
|
299
|
+
logo = Image.read("logo:").first
|
300
|
+
if /GraphicsMagick/.match Magick_version then
|
301
|
+
logo.resize!(200.0/logo.rows)
|
302
|
+
else
|
303
|
+
logo.crop!(98, 0, 461, 455).resize!(0.45)
|
304
|
+
end
|
305
|
+
|
306
|
+
# Create a new Image for the composited montage and logo
|
307
|
+
montage_image = ImageList.new
|
308
|
+
montage_image << montage.composite(logo, 245, 0, OverCompositeOp)
|
309
|
+
|
310
|
+
# Write the result to a file
|
311
|
+
montage_image.compression = RunlengthEncodedCompression
|
312
|
+
montage_image.matte = false
|
313
|
+
puts "Writing image ./rm_demo_out.miff"
|
314
|
+
montage_image.write "rm_demo_out.miff"
|
315
|
+
|
316
|
+
# Uncomment the following lines to display image to screen
|
317
|
+
# puts "Displaying image..."
|
318
|
+
# montage_image.display
|
319
|
+
|
320
|
+
rescue
|
321
|
+
puts "Caught exception: #{$!}"
|
322
|
+
end
|
323
|
+
|
324
|
+
exit
|
data/doc/ex/drawcomp.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
|
3
|
+
require 'RMagick'
|
4
|
+
|
5
|
+
# Read the snake image file and scale to 200 pixels high.
|
6
|
+
begin
|
7
|
+
snake = Magick::ImageList.new("images/Snake.wmf")
|
8
|
+
snake.scale!(200.0/snake.rows)
|
9
|
+
|
10
|
+
# Read the coffee cup image and scale to 200 pixels high.
|
11
|
+
coffee = Magick::ImageList.new("images/Coffee.wmf")
|
12
|
+
coffee.scale!(200.0/coffee.rows)
|
13
|
+
|
14
|
+
# We want the "no" symbol to be a little smaller.
|
15
|
+
# Read and scale to 150 pixels high.
|
16
|
+
sign = Magick::ImageList.new("images/No.wmf")
|
17
|
+
sign.scale!(150.0/sign.rows)
|
18
|
+
|
19
|
+
# Change the white pixels in the sign to transparent.
|
20
|
+
sign = sign.matte_replace(0,0)
|
21
|
+
|
22
|
+
# Create a "nosnake" draw object. Add a composite
|
23
|
+
# primitive that composites the "no" symbol over
|
24
|
+
# the snake. Draw it.
|
25
|
+
nosnake = Magick::Draw.new
|
26
|
+
nosnake.composite((snake.columns-sign.columns)/2,
|
27
|
+
(snake.rows-sign.rows)/2, 0, 0, sign)
|
28
|
+
nosnake.draw(snake)
|
29
|
+
|
30
|
+
# Repeat for the coffee cup.
|
31
|
+
nocoffee = Magick::Draw.new
|
32
|
+
nocoffee.composite((coffee.columns-sign.columns)/2,
|
33
|
+
(coffee.columns-sign.columns)/2, 0, 0, sign)
|
34
|
+
nocoffee.draw(coffee)
|
35
|
+
|
36
|
+
coffee.write("drawcomp1.gif")
|
37
|
+
snake.write("drawcomp2.gif")
|
38
|
+
|
39
|
+
rescue Magick::ImageMagickError
|
40
|
+
puts "#{$0}: ImageMagickError - #{$!}"
|
41
|
+
end
|
42
|
+
exit
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#! /usr/local/bin/ruby -w
|
2
|
+
require 'RMagick'
|
3
|
+
|
4
|
+
# Add a drop shadow to a text string. This example
|
5
|
+
# uses a 3-image animation to show each step of the
|
6
|
+
# process
|
7
|
+
|
8
|
+
Rows = 60
|
9
|
+
Cols = 250
|
10
|
+
Text = 'Ruby rocks!'
|
11
|
+
|
12
|
+
# This imagelist will contain the animation frames
|
13
|
+
anim = Magick::ImageList.new
|
14
|
+
|
15
|
+
ex = Magick::Image.new(Cols, Rows)
|
16
|
+
|
17
|
+
# Create a Draw object to draw the text with. Most of the text
|
18
|
+
# attributes are shared between the shadow and the foreground.
|
19
|
+
|
20
|
+
text = Magick::Draw.new
|
21
|
+
text.gravity = Magick::CenterGravity
|
22
|
+
text.pointsize = 36
|
23
|
+
text.font_weight = Magick::BoldWeight
|
24
|
+
text.font_style = Magick::ItalicStyle
|
25
|
+
text.stroke = 'transparent'
|
26
|
+
|
27
|
+
# Draw the shadow text first. The color is a very light gray.
|
28
|
+
# Position the text to the right and down.
|
29
|
+
text.annotate(ex, 0,0,2,2, Text) {
|
30
|
+
self.fill = 'gray60'
|
31
|
+
}
|
32
|
+
|
33
|
+
# Save the first frame of the animation.
|
34
|
+
anim << ex.copy
|
35
|
+
|
36
|
+
# Blur the shadow. Save a copy of the image as the 2nd frame.
|
37
|
+
ex = ex.blur_image(0,3)
|
38
|
+
anim << ex.copy
|
39
|
+
|
40
|
+
# Add the foreground text in solid black. Position it
|
41
|
+
# to the left and up from the shadow text.
|
42
|
+
text.annotate(ex, 0,0,-1,-1, Text) {
|
43
|
+
self.fill = 'maroon'
|
44
|
+
}
|
45
|
+
|
46
|
+
# Save yet another copy of the image as the 3rd frame.
|
47
|
+
anim << ex.copy
|
48
|
+
|
49
|
+
# Set the delay between frames to 1 second.
|
50
|
+
anim.delay = 100
|
51
|
+
|
52
|
+
# Set the delay after the last frame to 2 seconds.
|
53
|
+
anim.cur_image.delay = 300
|
54
|
+
|
55
|
+
# Iterate forever.
|
56
|
+
anim.iterations = 0
|
57
|
+
|
58
|
+
#anim.animate
|
59
|
+
anim.write('drop_shadow.gif')
|
60
|
+
exit
|