Image-Magick
view release on metacpan or search on metacpan
demo/compose-specials.pl view on Meta::CPAN
#!/usr/bin/perl
#
# Demonstration of some of the fancier Image Composition Methods
# including the 'rotate' parameter specific to PerlMagick Composite()
#
# NOTE: versions of IM older than IM v6.5.3-4 will need to rename the
# parameter "args=>" to the mis-named "blend=>" parameter.
#
# Also not that "composite -watermark" is actually known as the compose
# method "Modulate".
#
# Essentially each image is equivalent to
# convert logo: -crop 80x80+140+60 +repage \
# -size 60x60 gradient:black-white \
# -alpha set miff:- |\
# composite - -geometry +10+10 -virtual-pixel gray \
# -dissolve 70x30 show:
# for various composition methods.
#
use strict;
use Image::Magick;
# Background or Destination image
my $dest=Image::Magick->new();
$dest->Read('logo:');
$dest->Crop('100x100+400+100'); # wizards hat
$dest->Set(page=>'0x0+0+0');
$dest->Set(alpha=>'Set');
# Source, Composite or Overlay image
my $src=Image::Magick->new();
$src->Set(size=>'80x80');
$src->Read('gradient:black-white');
$src->Set(alpha=>'Set');
my $offset="+10+10";
# Circle Mask Image (same size as Destination)
my $circle=Image::Magick->new();
$circle->Set(size=>'80x80');
$circle->Read('xc:black');
$circle->Draw(fill=>'white',primitive=>'circle',points=>'39.5,39.5 10,39.5');
my $texture=Image::Magick->new();
$texture->Read('pattern:checkerboard');
# List of images generated
my $results=Image::Magick->new();
# Working copy of Destination Image
my $clone;
# ----------------------------------------
# Normal Composition Methods
$clone=$dest->Clone();
$clone->Label('Over\n(normal compose)');
$clone->Composite(
image=>$src,
compose=>'over',
geometry=>$offset,
);
push(@$results, $clone);
$clone=$dest->Clone();
$clone->Label('Multiply\n(add black)');
$clone->Composite(
image=>$src,
compose=>'multiply',
geometry=>$offset,
);
push(@$results, $clone);
$clone=$dest->Clone();
$clone->Label('Screen\n(add white)');
$clone->Composite(
image=>$src,
compose=>'screen',
geometry=>$offset,
);
push(@$results, $clone);
$clone=$dest->Clone();
$clone->Label('HardLight\n(light effects)');
$clone->Composite(
image=>$src,
compose=>'hardlight',
geometry=>$offset,
);
push(@$results, $clone);
# ---------------
# Masked and Blending Demonstration
$clone=$dest->Clone();
$clone->Label('Circle Masked\n(three image)');
$clone->Composite(
image=>$src,
mask=>$circle,
compose=>'over',
geometry=>$offset,
);
push(@$results, $clone);
$clone=$dest->Clone();
$clone->Label('Blend 50x50\n(50% plus 50%)');
$clone->Composite(
image=>$src,
( run in 0.724 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )