1#!/usr/bin/perl
2#
3# Overall demo of the major PerlMagick methods.
4#
5use Image::Magick;
6
7#
8# Read model & smile image.
9#
10print "Read...\n";
11$null=Image::Magick->new;
12$null->Set(size=>'70x70');
13$x=$null->ReadImage('NULL:black');
14warn "$x" if "$x";
15
16$model=Image::Magick->new();
17$x=$model->ReadImage('model.gif');
18warn "$x" if "$x";
19$model->Label('Magick');
20$model->Set(background=>'white');
21
22$smile=Image::Magick->new;
23$x=$smile->ReadImage('smile.gif');
24warn "$x" if "$x";
25$smile->Label('Smile');
26$smile->Set(background=>'white');
27#
28# Create image stack.
29#
30print "Transform image...\n";
31$images=Image::Magick->new();
32
33print "Adaptive Blur...\n";
34$example=$model->Clone();
35$example->Label('Adaptive Blur');
36$example->AdaptiveBlur('0x1');
37push(@$images,$example);
38
39print "Adaptive Resize...\n";
40$example=$model->Clone();
41$example->Label('Adaptive Resize');
42$example->AdaptiveResize('60%');
43push(@$images,$example);
44
45print "Adaptive Sharpen...\n";
46$example=$model->Clone();
47$example->Label('Adaptive Sharpen');
48$example->AdaptiveSharpen('0x1');
49push(@$images,$example);
50
51print "Adaptive Threshold...\n";
52$example=$model->Clone();
53$example->Label('Adaptive Threshold');
54$example->AdaptiveThreshold('5x5+5%');
55push(@$images,$example);
56
57print "Add Noise...\n";
58$example=$model->Clone();
59$example->Label('Add Noise');
60$example->AddNoise("Laplacian");
61push(@$images,$example);
62
63print "Annotate...\n";
64$example=$model->Clone();
65$example->Label('Annotate');
66$example->Annotate(text=>'Magick',geometry=>'+0+20',font=>'Generic.ttf',
67  fill=>'gold',gravity=>'North',pointsize=>14);
68push(@$images,$example);
69
70print "Auto-gamma...\n";
71$example=$model->Clone();
72$example->Label('Auto Gamma');
73$example->AutoGamma();
74push(@$images,$example);
75
76print "Auto-level...\n";
77$example=$model->Clone();
78$example->Label('Auto Level');
79$example->AutoLevel();
80push(@$images,$example);
81
82print "Blur...\n";
83$example=$model->Clone();
84$example->Label('Blur');
85$example->Blur('0.0x1.0');
86push(@$images,$example);
87
88print "Border...\n";
89$example=$model->Clone();
90$example->Label('Border');
91$example->Border(geometry=>'6x6',color=>'gold');
92push(@$images,$example);
93
94print "Channel...\n";
95$example=$model->Clone();
96$example->Label('Channel');
97$example->Channel(channel=>'red');
98push(@$images,$example);
99
100print "Charcoal...\n";
101$example=$model->Clone();
102$example->Label('Charcoal');
103$example->Charcoal('2x1');
104push(@$images,$example);
105
106print "ColorMatrix...\n";
107$example=$model->Clone();
108$example->Label('ColorMatrix');
109$example->ColorMatrix([1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0.5, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
110push(@$images,$example);
111
112print "Composite...\n";
113$example=$model->Clone();
114$example->Label('Composite');
115$example->Composite(image=>$smile,compose=>'over',geometry=>'+35+65');
116$example->Clamp();
117push(@$images,$example);
118
119print "Contrast...\n";
120$example=$model->Clone();
121$example->Label('Contrast');
122$example->Contrast();
123push(@$images,$example);
124
125print "Contrast Stretch...\n";
126$example=$model->Clone();
127$example->Label('Contrast Stretch');
128$example->ContrastStretch('5%');
129push(@$images,$example);
130
131print "Convolve...\n";
132$example=$model->Clone();
133$example->Label('Convolve');
134$example->Convolve([0.125, 0.125, 0.125, 0.125, 0.5, 0.125, 0.125, 0.125, 0.125]);
135push(@$images,$example);
136
137print "Crop...\n";
138$example=$model->Clone();
139$example->Label('Crop');
140$example->Crop(geometry=>'80x80+25+50');
141$example->Set(page=>'0x0+0+0');
142push(@$images,$example);
143
144print "Despeckle...\n";
145$example=$model->Clone();
146$example->Label('Despeckle');
147$example->Despeckle();
148push(@$images,$example);
149
150print "Distort...\n";
151$example=$model->Clone();
152$example->Label('Distort');
153$example->Distort(method=>'arc',points=>[60],'virtual-pixel'=>'white');
154push(@$images,$example);
155
156print "Draw...\n";
157$example=$model->Clone();
158$example->Label('Draw');
159$example->Draw(fill=>'none',stroke=>'gold',primitive=>'circle',
160  points=>'60,90 60,120',strokewidth=>2);
161push(@$images,$example);
162
163print "Detect Edges...\n";
164$example=$model->Clone();
165$example->Label('Detect Edges');
166$example->Edge('2x0.5');
167$example->Clamp();
168push(@$images,$example);
169
170print "Emboss...\n";
171$example=$model->Clone();
172$example->Label('Emboss');
173$example->Emboss('0x1');
174push(@$images,$example);
175
176print "Encipher...\n";
177$example=$model->Clone();
178$example->Label('Encipher');
179$example->Encipher('Magick');
180push(@$images,$example);
181
182print "Equalize...\n";
183$example=$model->Clone();
184$example->Label('Equalize');
185$example->Equalize();
186push(@$images,$example);
187
188print "Explode...\n";
189$example=$model->Clone();
190$example->Label('Explode');
191$example->Implode(-1);
192push(@$images,$example);
193
194print "Flip...\n";
195$example=$model->Clone();
196$example->Label('Flip');
197$example->Flip();
198push(@$images,$example);
199
200print "Flop...\n";
201$example=$model->Clone();
202$example->Label('Flop');
203$example->Flop();
204push(@$images,$example);
205
206print "Frame...\n";
207$example=$model->Clone();
208$example->Label('Frame');
209$example->Frame('15x15+3+3');
210push(@$images,$example);
211
212print "Fx...\n";
213$example=$model->Clone();
214$example->Label('Fx');
215push(@$images,$example->Fx(expression=>'0.5*u'));
216
217print "Gamma...\n";
218$example=$model->Clone();
219$example->Label('Gamma');
220$example->Gamma(1.6);
221push(@$images,$example);
222
223print "Gaussian Blur...\n";
224$example=$model->Clone();
225$example->Label('Gaussian Blur');
226$example->GaussianBlur('0.0x1.5');
227push(@$images,$example);
228
229print "Gradient...\n";
230$gradient=Image::Magick->new;
231$gradient->Set(size=>'130x194');
232$x=$gradient->ReadImage('gradient:#20a0ff-#ffff00');
233warn "$x" if "$x";
234$gradient->Label('Gradient');
235push(@$images,$gradient);
236
237print "Grayscale...\n";
238$example=$model->Clone();
239$example->Label('Grayscale');
240$example->Set(type=>'grayscale');
241push(@$images,$example);
242
243print "Implode...\n";
244$example=$model->Clone();
245$example->Label('Implode');
246$example->Implode(0.5);
247push(@$images,$example);
248
249print "Kuwahara...\n";
250$example=$model->Clone();
251$example->Label('Kuwahara');
252$example->Kuwahara('0x1');
253push(@$images,$example);
254
255print "Level...\n";
256$example=$model->Clone();
257$example->Label('Level');
258$example->Level('20%x');
259$example->Clamp();
260push(@$images,$example);
261
262print "Linear stretch...\n";
263$example=$model->Clone();
264$example->Label('Linear Stretch');
265$example->LinearStretch('5x5');
266push(@$images,$example);
267
268print "Median Filter...\n";
269$example=$model->Clone();
270$example->Label('Median Filter');
271$example->MedianFilter('4x4');
272push(@$images,$example);
273
274print "Mode...\n";
275$example=$model->Clone();
276$example->Label('Mode');
277$example->Mode('4x4');
278push(@$images,$example);
279
280print "Modulate...\n";
281$example=$model->Clone();
282$example->Label('Modulate');
283$example->Modulate(brightness=>110,saturation=>110,hue=>110);
284push(@$images,$example);
285$example=$model->Clone();
286
287print "Monochrome...\n";
288$example=$model->Clone();
289$example->Label('Monochrome');
290$example->Quantize(colorspace=>'gray',colors=>2,dither=>'false');
291push(@$images,$example);
292
293print "Morphology...\n";
294$example=$model->Clone();
295$example->Label('Morphology');
296$example->Morphology(method=>'Dilate',kernel=>'Diamond',iterations=>2);
297push(@$images,$example);
298
299print "Motion Blur...\n";
300$example=$model->Clone();
301$example->Label('Motion Blur');
302$example->MotionBlur('0x13+10-10');
303push(@$images,$example);
304
305print "Negate...\n";
306$example=$model->Clone();
307$example->Label('Negate');
308$example->Negate();
309push(@$images,$example);
310
311print "Normalize...\n";
312$example=$model->Clone();
313$example->Label('Normalize');
314$example->Normalize();
315push(@$images,$example);
316
317print "Oil Paint...\n";
318$example=$model->Clone();
319$example->Label('Oil Paint');
320$example->OilPaint('2x0.5');
321push(@$images,$example);
322
323print "Plasma...\n";
324$plasma=Image::Magick->new;
325$plasma->Set(size=>'130x194');
326$x=$plasma->ReadImage('plasma:fractal');
327warn "$x" if "$x";
328$plasma->Label('Plasma');
329push(@$images,$plasma);
330
331print "Polaroid...\n";
332$example=$model->Clone();
333$example->Label('Polaroid');
334$example->Polaroid(caption=>'Magick',angle=>-5.0,gravity=>'center');
335push(@$images,$example);
336
337print "Posterize...\n";
338$example=$model->Clone();
339$example->Label('Posterize');
340$example->Posterize(5);
341push(@$images,$example);
342
343print "Quantize...\n";
344$example=$model->Clone();
345$example->Label('Quantize');
346$example->Quantize();
347push(@$images,$example);
348
349print "Rotational Blur...\n";
350$example=$model->Clone();
351$example->Label('Rotational Blur');
352$example->RotationalBlur(10);
353push(@$images,$example);
354
355print "Raise...\n";
356$example=$model->Clone();
357$example->Label('Raise');
358$example->Raise('10x10');
359push(@$images,$example);
360
361print "Reduce Noise...\n";
362$example=$model->Clone();
363$example->Label('Reduce Noise');
364$example->ReduceNoise('2x2');
365push(@$images,$example);
366
367print "Resize...\n";
368$example=$model->Clone();
369$example->Label('Resize');
370$example->Resize('60%');
371push(@$images,$example);
372
373print "Roll...\n";
374$example=$model->Clone();
375$example->Label('Roll');
376$example->Roll(geometry=>'+20+10');
377push(@$images,$example);
378
379print "Rotate...\n";
380$example=$model->Clone();
381$example->Label('Rotate');
382$example->Rotate(45);
383push(@$images,$example);
384
385print "Sample...\n";
386$example=$model->Clone();
387$example->Label('Sample');
388$example->Sample('60%');
389push(@$images,$example);
390
391print "Scale...\n";
392$example=$model->Clone();
393$example->Label('Scale');
394$example->Scale('60%');
395push(@$images,$example);
396
397print "Segment...\n";
398$example=$model->Clone();
399$example->Label('Segment');
400$example->Segment();
401push(@$images,$example);
402
403print "Shade...\n";
404$example=$model->Clone();
405$example->Label('Shade');
406$example->Shade(geometry=>'30x30',gray=>'true');
407push(@$images,$example);
408
409print "Sharpen...\n";
410$example=$model->Clone();
411$example->Label('Sharpen');
412$example->Sharpen('0.0x1.0');
413$example->Clamp();
414push(@$images,$example);
415
416print "Shave...\n";
417$example=$model->Clone();
418$example->Label('Shave');
419$example->Shave('10x10');
420push(@$images,$example);
421
422print "Shear...\n";
423$example=$model->Clone();
424$example->Label('Shear');
425$example->Shear('-20x20');
426push(@$images,$example);
427
428print "Sketch...\n";
429$example=$model->Clone();
430$example->Label('Sketch');
431$example->Set(colorspace=>'Gray');
432$example->Sketch('0x20+120');
433push(@$images,$example);
434
435print "Sigmoidal Contrast...\n";
436$example=$model->Clone();
437$example->Label('Sigmoidal Contrast');
438$example->SigmoidalContrast("3x50%");
439push(@$images,$example);
440
441print "Spread...\n";
442$example=$model->Clone();
443$example->Label('Spread');
444$example->Spread();
445push(@$images,$example);
446
447print "Solarize...\n";
448$example=$model->Clone();
449$example->Label('Solarize');
450$example->Solarize();
451push(@$images,$example);
452
453print "Swirl...\n";
454$example=$model->Clone();
455$example->Label('Swirl');
456$example->Swirl(90);
457push(@$images,$example);
458
459print "Tint...\n";
460$example=$model->Clone();
461$example->Label('Tint');
462$example->Tint('wheat');
463push(@$images,$example);
464
465print "Unsharp Mask...\n";
466$example=$model->Clone();
467$example->Label('Unsharp Mask');
468$example->UnsharpMask('0.0x1.0');
469$example->Clamp();
470push(@$images,$example);
471
472print "Vignette...\n";
473$example=$model->Clone();
474$example->Label('Vignette');
475$example->Vignette('0x20');
476push(@$images,$example);
477
478print "Wave...\n";
479$example=$model->Clone();
480$example->Label('Wave');
481$example->Wave('25x150');
482push(@$images,$example);
483
484print "WaveletDenoise...\n";
485$example=$model->Clone();
486$example->Label('WaveletDenoise');
487$example->WaveletDenoise('5%');
488push(@$images,$example);
489
490#
491# Create image montage.
492#
493print "Montage...\n";
494$montage=$images->Montage(geometry=>'128x160+8+4>',gravity=>'Center',
495  tile=>'5x+10+200',compose=>'over',background=>'#ffffff',font=>'Generic.ttf',
496  pointsize=>18,fill=>'#600',stroke=>'none',shadow=>'true');
497
498$logo=Image::Magick->new();
499$logo->Read('logo:');
500$logo->Zoom('40%');
501$montage->Composite(image=>$logo,gravity=>'North');
502
503print "Write...\n";
504$montage->Set(matte=>'false');
505$montage->Write('demo.jpg');
506print "Display...\n";
507$montage->Write('win:');
508