forked from openkylin/imagemagick
461 lines
10 KiB
Perl
461 lines
10 KiB
Perl
#!/usr/bin/perl
|
|
#
|
|
# Overall demo of the major PerlMagick methods.
|
|
#
|
|
use Image::Magick;
|
|
|
|
#
|
|
# Read model & smile image.
|
|
#
|
|
print "Read...\n";
|
|
$null=Image::Magick->new;
|
|
$null->Set(size=>'70x70');
|
|
$x=$null->ReadImage('NULL:black');
|
|
warn "$x" if "$x";
|
|
|
|
$model=Image::Magick->new();
|
|
$x=$model->ReadImage('model.gif');
|
|
warn "$x" if "$x";
|
|
$model->Label('Magick');
|
|
$model->Set(background=>'white');
|
|
|
|
$smile=Image::Magick->new;
|
|
$x=$smile->ReadImage('smile.gif');
|
|
warn "$x" if "$x";
|
|
$smile->Label('Smile');
|
|
$smile->Set(background=>'white');
|
|
#
|
|
# Create image stack.
|
|
#
|
|
print "Transform image...\n";
|
|
$images=Image::Magick->new();
|
|
|
|
print "Adaptive Blur...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Adaptive Blur');
|
|
$example->AdaptiveBlur('0x1');
|
|
push(@$images,$example);
|
|
|
|
print "Adaptive Resize...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Adaptive Resize');
|
|
$example->AdaptiveResize('60%');
|
|
push(@$images,$example);
|
|
|
|
print "Adaptive Sharpen...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Adaptive Sharpen');
|
|
$example->AdaptiveSharpen('0x1');
|
|
push(@$images,$example);
|
|
|
|
print "Adaptive Threshold...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Adaptive Threshold');
|
|
$example->AdaptiveThreshold('5x5+5%');
|
|
push(@$images,$example);
|
|
|
|
print "Add Noise...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Add Noise');
|
|
$example->AddNoise("Laplacian");
|
|
push(@$images,$example);
|
|
|
|
print "Annotate...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Annotate');
|
|
$example->Annotate(text=>'Magick',geometry=>'+0+20',font=>'Generic.ttf',
|
|
fill=>'gold',gravity=>'North',pointsize=>14);
|
|
push(@$images,$example);
|
|
|
|
print "Auto-gamma...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Auto Gamma');
|
|
$example->AutoGamma();
|
|
push(@$images,$example);
|
|
|
|
print "Auto-level...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Auto Level');
|
|
$example->AutoLevel();
|
|
push(@$images,$example);
|
|
|
|
print "Blur...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Blur');
|
|
$example->Blur('0.0x1.0');
|
|
push(@$images,$example);
|
|
|
|
print "Border...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Border');
|
|
$example->Border(geometry=>'6x6',color=>'gold');
|
|
push(@$images,$example);
|
|
|
|
print "Channel...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Channel');
|
|
$example->Channel(channel=>'red');
|
|
push(@$images,$example);
|
|
|
|
print "Charcoal...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Charcoal');
|
|
$example->Charcoal('0x1');
|
|
push(@$images,$example);
|
|
|
|
print "ColorMatrix...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('ColorMatrix');
|
|
$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]);
|
|
push(@$images,$example);
|
|
|
|
print "Composite...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Composite');
|
|
$example->Composite(image=>$smile,compose=>'over',geometry=>'+35+65');
|
|
push(@$images,$example);
|
|
|
|
print "Contrast...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Contrast');
|
|
$example->Contrast();
|
|
push(@$images,$example);
|
|
|
|
print "Contrast Stretch...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Contrast Stretch');
|
|
$example->ContrastStretch('5%');
|
|
push(@$images,$example);
|
|
|
|
print "Convolve...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Convolve');
|
|
$example->Convolve([1, 1, 1, 1, 4, 1, 1, 1, 1]);
|
|
push(@$images,$example);
|
|
|
|
print "Crop...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Crop');
|
|
$example->Crop(geometry=>'80x80+25+50');
|
|
$example->Set(page=>'0x0+0+0');
|
|
push(@$images,$example);
|
|
|
|
print "Despeckle...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Despeckle');
|
|
$example->Despeckle();
|
|
push(@$images,$example);
|
|
|
|
print "Distort...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Distort');
|
|
$example->Distort(method=>'arc',points=>[60],'virtual-pixel'=>'white');
|
|
push(@$images,$example);
|
|
|
|
print "Draw...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Draw');
|
|
$example->Draw(fill=>'none',stroke=>'gold',primitive=>'circle',
|
|
points=>'60,90 60,120',strokewidth=>2);
|
|
push(@$images,$example);
|
|
|
|
print "Detect Edges...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Detect Edges');
|
|
$example->Edge();
|
|
push(@$images,$example);
|
|
|
|
print "Emboss...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Emboss');
|
|
$example->Emboss('0x1');
|
|
push(@$images,$example);
|
|
|
|
print "Equalize...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Equalize');
|
|
$example->Equalize();
|
|
push(@$images,$example);
|
|
|
|
print "Implode...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Explode');
|
|
$example->Implode(-1);
|
|
push(@$images,$example);
|
|
|
|
print "Flip...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Flip');
|
|
$example->Flip();
|
|
push(@$images,$example);
|
|
|
|
print "Flop...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Flop');
|
|
$example->Flop();
|
|
push(@$images,$example);
|
|
|
|
print "Frame...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Frame');
|
|
$example->Frame('15x15+3+3');
|
|
push(@$images,$example);
|
|
|
|
print "Fx...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Fx');
|
|
push(@$images,$example->Fx(expression=>'0.5*u'));
|
|
|
|
print "Gamma...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Gamma');
|
|
$example->Gamma(1.6);
|
|
push(@$images,$example);
|
|
|
|
print "Gaussian Blur...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Gaussian Blur');
|
|
$example->GaussianBlur('0.0x1.5');
|
|
push(@$images,$example);
|
|
|
|
print "Gradient...\n";
|
|
$gradient=Image::Magick->new;
|
|
$gradient->Set(size=>'130x194');
|
|
$x=$gradient->ReadImage('gradient:#20a0ff-#ffff00');
|
|
warn "$x" if "$x";
|
|
$gradient->Label('Gradient');
|
|
push(@$images,$gradient);
|
|
|
|
print "Grayscale...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Grayscale');
|
|
$example->Set(type=>'grayscale');
|
|
push(@$images,$example);
|
|
|
|
print "Implode...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Implode');
|
|
$example->Implode(0.5);
|
|
push(@$images,$example);
|
|
|
|
print "Level...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Level');
|
|
$example->Level('20%');
|
|
push(@$images,$example);
|
|
|
|
print "Median Filter...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Median Filter');
|
|
$example->MedianFilter();
|
|
push(@$images,$example);
|
|
|
|
print "Modulate...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Modulate');
|
|
$example->Modulate(brightness=>110,saturation=>110,hue=>110);
|
|
push(@$images,$example);
|
|
$example=$model->Clone();
|
|
|
|
print "Monochrome...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Monochrome');
|
|
$example->Quantize(colorspace=>'gray',colors=>2,dither=>'false');
|
|
push(@$images,$example);
|
|
|
|
print "Morphology...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Morphology');
|
|
$example->Morphology(method=>'Dilate',kernel=>'Diamond',iterations=>3);
|
|
push(@$images,$example);
|
|
|
|
print "Motion Blur...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Motion Blur');
|
|
$example->MotionBlur('0x13+10-10');
|
|
push(@$images,$example);
|
|
|
|
print "Negate...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Negate');
|
|
$example->Negate();
|
|
push(@$images,$example);
|
|
|
|
print "Normalize...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Normalize');
|
|
$example->Normalize();
|
|
push(@$images,$example);
|
|
|
|
print "Oil Paint...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Oil Paint');
|
|
$example->OilPaint();
|
|
push(@$images,$example);
|
|
|
|
print "Plasma...\n";
|
|
$plasma=Image::Magick->new;
|
|
$plasma->Set(size=>'130x194');
|
|
$x=$plasma->ReadImage('plasma:fractal');
|
|
warn "$x" if "$x";
|
|
$plasma->Label('Plasma');
|
|
push(@$images,$plasma);
|
|
|
|
print "Polaroid...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Polaroid');
|
|
$example->Polaroid(caption=>'Magick',rotate=>-5.0,gravity=>'center');
|
|
push(@$images,$example);
|
|
|
|
print "Quantize...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Quantize');
|
|
$example->Quantize();
|
|
push(@$images,$example);
|
|
|
|
print "Radial Blur...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Radial Blur');
|
|
$example->RadialBlur(10);
|
|
push(@$images,$example);
|
|
|
|
print "Raise...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Raise');
|
|
$example->Raise('10x10');
|
|
push(@$images,$example);
|
|
|
|
print "Reduce Noise...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Reduce Noise');
|
|
$example->ReduceNoise();
|
|
push(@$images,$example);
|
|
|
|
print "Resize...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Resize');
|
|
$example->Resize('60%');
|
|
push(@$images,$example);
|
|
|
|
print "Roll...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Roll');
|
|
$example->Roll(geometry=>'+20+10');
|
|
push(@$images,$example);
|
|
|
|
print "Rotate...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Rotate');
|
|
$example->Rotate(45);
|
|
push(@$images,$example);
|
|
|
|
print "Sample...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Sample');
|
|
$example->Sample('60%');
|
|
push(@$images,$example);
|
|
|
|
print "Scale...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Scale');
|
|
$example->Scale('60%');
|
|
push(@$images,$example);
|
|
|
|
print "Segment...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Segment');
|
|
$example->Segment();
|
|
push(@$images,$example);
|
|
|
|
print "Shade...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Shade');
|
|
$example->Shade(geometry=>'30x30',gray=>'true');
|
|
push(@$images,$example);
|
|
|
|
print "Sharpen...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Sharpen');
|
|
$example->Sharpen('0.0x1.0');
|
|
push(@$images,$example);
|
|
|
|
print "Shave...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Shave');
|
|
$example->Shave('10x10');
|
|
push(@$images,$example);
|
|
|
|
print "Shear...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Shear');
|
|
$example->Shear('-20x20');
|
|
push(@$images,$example);
|
|
|
|
print "Sketch...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Sketch');
|
|
$example->Set(colorspace=>'Gray');
|
|
$example->Sketch('0x20+120');
|
|
push(@$images,$example);
|
|
|
|
print "Sigmoidal Contrast...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Sigmoidal Contrast');
|
|
$example->SigmoidalContrast("3x50%");
|
|
push(@$images,$example);
|
|
|
|
print "Spread...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Spread');
|
|
$example->Spread();
|
|
push(@$images,$example);
|
|
|
|
print "Solarize...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Solarize');
|
|
$example->Solarize();
|
|
push(@$images,$example);
|
|
|
|
print "Swirl...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Swirl');
|
|
$example->Swirl(90);
|
|
push(@$images,$example);
|
|
|
|
print "Unsharp Mask...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Unsharp Mask');
|
|
$example->UnsharpMask('0.0x1.0');
|
|
push(@$images,$example);
|
|
|
|
print "Vignette...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Vignette');
|
|
$example->Vignette('0x20');
|
|
push(@$images,$example);
|
|
|
|
print "Wave...\n";
|
|
$example=$model->Clone();
|
|
$example->Label('Wave');
|
|
$example->Wave('25x150');
|
|
push(@$images,$example);
|
|
#
|
|
# Create image montage.
|
|
#
|
|
print "Montage...\n";
|
|
$montage=$images->Montage(geometry=>'128x160+8+4>',gravity=>'Center',
|
|
tile=>'5x+10+200',compose=>'over',background=>'#ffffff',
|
|
font=>'Generic.ttf',pointsize=>18,fill=>'#600',stroke=>'none',
|
|
shadow=>'true');
|
|
|
|
$logo=Image::Magick->new();
|
|
$logo->Read('logo:');
|
|
$logo->Zoom('40%');
|
|
$montage->Composite(image=>$logo,gravity=>'North');
|
|
|
|
print "Write...\n";
|
|
$montage->Set(matte=>'false');
|
|
$montage->Write('demo.jpg');
|
|
print "Display...\n";
|
|
$montage->Write('win:');
|