NAME Plack::App::ImageMagick - Create and manipulate images with Image::Magick VERSION version 1.110990 SYNOPSIS # app.psgi use Plack::App::ImageMagick; my $thumbnailer_app = Plack::App::ImageMagick->new( root => '/path/to/images', apply => [ Scale => { geometry => "%{width:-200}x%{height:-120}" }, Set => { quality => 30 }, ], with_query => 1, ); my $captcha_app = Plack::App::ImageMagick-new( apply => [ Set => { size => "100x20" }, ReadImage => [ 'xc:%{bgcolor:-white}', ], Set => { magick => "png" }, ], post_process => sub { my ($app, $env, $img) = @_; $img->Annotate( text => random_text( $env->{PATH_INFO} ), fill => 'black', pointsize => 16, gravity => 'Center', ); return $img; } ); # and map it later use Plack::Builder; builder { # /thumbs/photo_1.jpg?width=640&height=480 mount "/thumbs/" => $thumbnailer_app; # /captcha/623b1c9b03d4033635a545b54ffc4775.png mount "/captcha/" => $captcha_app; } DESCRIPTION Use Image::Magick to create and manipulate images for your web applications. CONFIGURATION You need to supply "apply" or "handler" configuration options. All other parameters are optional. apply my $app = Plack::App::ImageMagick->new( root => '/path/to/images', apply => [ Scale => { geometry => "%{width:-200}x%{height:-120}" }, Set => { quality => 30 }, ], with_query => 1, ); Array reference of ImageMagick's *method_name* and its *arguments* pairs. The *arguments* element could be a hash or array reference - both will be flatten when passed as *method_name* parameters. If used with "root" then attempt will be made to read image located there, check "root" for details. If "with_query" is specified the "apply" block will be pre-processed to replace placeholders with values from query string, check "with_query" for more details. Results of the following methods will be pushed to @$img: * Clone * EvaluateImages * Fx * Smush * Transform Results of the following method will replace current $img object: * FlattenImage *Note:* if the @$img object contains more then one layer "FlattenImage()" is called before rendering. *Note:* "handler" and "apply" are mutually exclusive. root my $app = Plack::App::ImageMagick->new( root => '/path/to/images', apply => [ ... ], ); Path to images used in conjunction with "apply" to allow modifications of existing images. Attempt will be made to read image located there, based on "$env->{PATH_INFO}", failure to read image will result in *500 Internal Server Error* response. In essence it is equal to calling "Read()" before "apply" methods: $img->Read( $self->root . $env->{PATH_INFO} ); with_query my $app = Plack::App::ImageMagick->new( apply => [ '%{method:-Scale}' => { geometry => "%{width:-200}x%{height:-120}" }, Set => { quality => '%{quality:-30}' }, ], with_query => 1, ); Used with "apply" allows to use placeholders which will be replaced with values found in query string. For details about syntax please see String::Bash. User supplied value (from query string) is validated with "\A[\w ]+\z", if validation fails *403 Forbidden* will be thrown. Please note that providing default values is recommended. cache_dir my $app = Plack::App::ImageMagick->new( cache_dir => '/path/to/cache', apply => [ ... ], ); If provided images created will be saved in this directory, with filenames based on "$env->{REQUEST_URI}" MD5 checksum. However use of reverse proxy for even better performance gain is recommended. handler my $app = Plack::App::ImageMagick->new( handler => sub { my ($app, $env, $img) = @_; # process $img ... return $img; }, ); Sub reference called with following parameters: $app Reference to current Plack::App::ImageMagick object. $env Reference to current $env. $img Reference to Image::Magick object created with: my $img = Image::Magick->new(); *Note:* if returned @$img object contains more then one layer "FlattenImage()" is called before rendering. *Note:* "handler" and "apply" are mutually exclusive. pre_process my $app = Plack::App::ImageMagick->new( pre_process => sub { my ($app, $env, $img) = @_; # process $img ... return $img; }, apply => [ ... ], ); Sub reference called before "apply" methods are processed, with same parameters as "handler". Returns $img which is processed later by methods defined in "apply". post_process my $app = Plack::App::ImageMagick->new( apply => [ ... ], post_process => sub { my ($app, $env, $img) = @_; # process $img ... return $img; }, ); Sub reference called after "apply" (with $img processed by its methods), with same parameters as "handler". *Note:* if the @$img object contains more then one layer "FlattenImage()" is called before rendering. SEE ALSO * Image::Magick * Plack * String::Bash AUTHOR Alex J. G. Burzyński COPYRIGHT AND LICENSE This software is copyright (c) 2011 by Alex J. G. Burzyński . This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.