use strict;
use Carp;
require Image::Magick;
our $VERSION = '0.01';
sub new {
my $class = shift;
my $self = bless {}, $class;
}
sub debug {
my $self = shift;
$self->{debug} = shift;
}
sub brand {
my ($self, %args) = @_;
# Required Parameters
my $source = $args{source};
my $target = $args{target};
my $output = $args{output};
# Optional Parameters
my $gravity = $args{gravity} || 'SouthWest';
my $composite = $args{composite} || 'over';
my $format = $args{format} || 'jpg';
my $quality = $args{quality} || 100;
# Error Checking
if( !$source ){
carp "No source image specified";
return undef;
}
if( !$target ){
carp "No target image specified.";
return undef;
}
if( !$output ){
carp "No output image specified.";
return undef;
}
# Debug Output
if( $self->{debug} ){
warn "Source : $source\n";
warn "Target : $target\n";
warn "Output : $output\n";
warn "Gravity : $gravity\n";
warn "Composite : $composite\n";
warn "Quality : $quality\n";
warn "Format : $format\n";
}
eval {
my $im_s = new Image::Magick;
my $im_t = new Image::Magick;
my $err;
open(IMAGE,"<$source") or carp "Could not open source image: $source ($!)" and return undef;
$err = $im_s->Read(file=>\*IMAGE);
die $err if $err;
close(IMAGE);
open(IMAGE,"<$target") or carp "Could not open target image: $target ($!)" and return undef;
$err = $im_t->Read(file=>\*IMAGE);
die $err if $err;
close(IMAGE);
$im_s->Set( quality => $quality );
$im_t->Set( quality => $quality );
$im_t->Composite( image => $im_s,
composite => 'over',
gravity => $gravity );
$im_t->Write("$format:$output");
};
if( $@ ){
warn $@ and return undef;
}
return 1;
}
1;
__END__
=head1 NAME
Image::Magick::Brand - Perl extension for creating branded images with ImageMagick.
=head1 SYNOPSIS
use Image::Magick::Brand;
my $b = new Image::Magick::Brand;
$b->debug(1); # debugging statements on
# Required parameters
$b->brand( source => 'brand.png',
target => 'photo.jpg',
output => 'branded.jpg' );
# Required and optional parameters
$b->brand( source => 'brand.png',
target => 'photo.jpg',
output => 'branded.jpg',
gravity => 'SouthWest',
format => 'jpg',
composite => 'over',
quality => 75 );
=head1 DESCRIPTION
Create branded images by composing one image on top of another. For optimal results, use a transparent png (or gif...if you must)
as the source image. Note: You must have the appropriate system libraries installed to use certain image formats (ie: lipjpeg, libpng).
ImageMagick will complain if you don't.
Source + Target = Branded Image
+---------+ +---------+
| | | |
| | | |
| | | +--+ |
+--+ | | | | | |
| | + | | = | +--+ |
+--+ +---------+ +---------+
=head1 PREREQUISITES
C<Image::Magick>
=cut
=head1 PARAMETERS
=head2 REQUIRED PARAMETERS
=over 4
=item source
The input path of the source image ('brand image').
=over 4
=item target
The input path of the target image.
=over 4
=item output
The output path of the branded image.
=head2 OPTIONAL PARAMETERS
=item gravity
The gravity (location) of the source image on top of the target image.
+---------+
| 1 2 3 |
| 4 |
| 5 6 7 |
+----------
1 = NorthWest
2 = North
3 = NorthEast
4 = Center
5 = SouthWest (default)
6 = South
7 = SouthEast
=item quality
Quality for JPG/MIFF/PNG output (0-100). Default = 100.
=item composite
The 'composite' value as passed to ImageMagick's composite function. Default = 'over'. Read the docs for the other possible values.
=item format
The output format. Default = jpg.
=cut
=head1 EXPORT
None by default.
=head1 VERSION HISTORY
Version 0.01 (03 May 2005): Initial Revision
=head1 SEE ALSO
L<Image::Magick>
L<Image::Magick::Thumbnail::Fixed>
=head1 AUTHOR
Adam Roth, E<lt>aroth@cpan.orgE<gt>
Originally developed for http://www.fetishcyclesfanclub.com. Let me know if you find this module useful.
=head1 COPYRIGHT AND LICENSE
Copyright 2005 by Adam Roth
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut