Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100755 325 lines (258 sloc) 9.164 kb
d9b079a Initial revision
tim authored
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
32d8999 Minor changes
rmagick authored
20 model = ImageList.new("../doc/ex/images/model.miff")
d9b079a Initial revision
tim authored
21 model.border_color = "black"
22 model.background_color = "black"
23 model.cur_image[:Label] = "RMagick"
24
32d8999 Minor changes
rmagick authored
25 smile = ImageList.new("../doc/ex/images/smile.miff")
d9b079a Initial revision
tim authored
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") {
a53c76d Change to use Geometry objects instead of geometry strings
rmagick authored
152 self.size = Geometry.new(model.columns, model.rows)
d9b079a Initial revision
tim authored
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") {
a53c76d Change to use Geometry objects instead of geometry strings
rmagick authored
191 self.size = Geometry.new(model.columns, model.rows)
d9b079a Initial revision
tim authored
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
cdc6e03 Change montage tile= option to specify the exact number of rows neede…
rmagick authored
279 rows = (example.size + 4) / 5
280 self.tile = Geometry.new(5,rows)
d9b079a Initial revision
tim authored
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
Something went wrong with that request. Please try again.