POE::Component::App::PNGCrush - non-blocking wrapper around App::PNGCrush
use strict; use warnings; use POE qw(Component::App::PNGCrush); my $poco = POE::Component::App::PNGCrush->spawn; POE::Session->create( package_states => [ main => [qw(_start crushed)] ], ); $poe_kernel->run; sub _start { $poco->run( { in => [ qw(file1.png file2.png file3.png) ], options => [ qw( -d OUT_DIR -brute 1 ), remove => [ qw( gAMA cHRM sRGB iCCP ) ], ], event => 'crushed', } ); } sub crushed { my $in_ref = $_[ARG0]; my $proc_ref = $in_ref->{out}; for ( keys %$proc_ref ) { if ( exists $proc_ref->{$_}{error} ) { print "Got error on file $_ : $proc_ref->{$_}{error}\n"; } else { printf "Stats for file %s\n\tSize reduction: %.2f%%\n\t" . "IDAT reduction: %.2f%%\n", $_, @{ $proc_ref->{$_} }{ qw(size idat) }; } } $poco->shutdown; }
Using event based interface is also possible.
The module is a non-blocking wrapper around App::PNGCrush which provides interface to ``pngcrush'' program. See documentation for App::PNGCrush regarding information on how to obtain ``pngcrush'' program.
You should familiarize yourself with new(), run() and set_options() methods of App::PNGCrush module to fully understand the workings of this POE wrapper (although, I'll point you to those in the right place throughout this document)
new()
run()
set_options()
spawn
my $poco = POE::Component::App::PNGCrush->spawn; POE::Component::App::PNGCrush->spawn( alias => 'crush', obj_args => { max_time => 600, }, options => { debug => 1, trace => 1, # POE::Session arguments for the component }, debug => 1, # output some debug info );
The spawn method returns a POE::Component::App::PNGCrush object. It takes a few arguments, all of which are optional. The possible arguments are as follows:
alias
POE::Component::App::PNGCrush->spawn( alias => 'crush' );
Optional. Specifies a POE Kernel alias for the component.
obj_args
POE::Component::App::PNGCrush->spawn( obj_args => { max_time => 600 }, );
Optional. Takes a hashref as an argument. If specified that hashref will be directly dereferenced into App::PNGCrush's constructor (new() method). See documentation for App::PNGCrush regarding valid values.
options
my $poco = POE::Component::App::PNGCrush->spawn( options => { trace => 1, default => 1, }, );
Optional. A hashref of POE Session options to pass to the component's session.
debug
my $poco = POE::Component::App::PNGCrush->spawn( debug => 1 );
When set to a true value turns on output of debug messages. Defaults to: 0.
0
run
$poco->run( { event => 'event_for_output', in => [ qw(file1.png file2.png file3.png) ], options => [ qw( -d OUT_DIR -brute 1 ), remove => [ qw( gAMA cHRM sRGB iCCP ) ], _blah => 'pooh!', session => 'other', } );
Takes a hashref as an argument, does not return a sensible return value. See run event's description for more information.
session_id
my $poco_id = $poco->session_id;
Takes no arguments. Returns component's session ID.
shutdown
$poco->shutdown;
Takes no arguments. Shuts down the component.
$poe_kernel->post( crush => run => { event => 'event_for_output', in => [ qw(file1.png file2.png file3.png) ], options => [ qw( -d OUT_DIR -brute 1 ), remove => [ qw( gAMA cHRM sRGB iCCP ) ], _blah => 'pooh!', session => 'other', } );
Instructs the component to perform "crushing" of png files. Takes a hashref as an argument, the possible keys/value of that hashref are as follows:
event
{ event => 'results_event', }
Mandatory. Specifies the name of the event to emit when results are ready. See OUTPUT section for more information.
in
{ in => 'file.png' } { in => [ qw(file1.png file2.png file3.png) ] }
Mandatory. Takes either a scalar containing a filename of an image you want to "crush" or an arrayref of filenames (if more than one).
{ options => [ qw( -d OUT_DIR -brute 1 ), remove => [ qw( gAMA cHRM sRGB iCCP ) ], }
Mandatory. Takes an arrayref as a value which will be directly dereferenced into set_options() method of App::PNGCrush. See documentation for App::PNGCrush's set_options() method for possible values.
session
{ session => 'other' } { session => $other_session_reference } { session => $other_session_ID }
Optional. Takes either an alias, reference or an ID of an alternative session to send output to.
{ _user => 'random', _another => 'more', }
Optional. Any keys starting with _ (underscore) will not affect the component and will be passed back in the result intact.
_
$poe_kernel->post( EXAMPLE => 'shutdown' );
Takes no arguments. Tells the component to shut itself down.
$VAR1 = { 'out' => { 'p2.png' => { 'msg' => undef, 'total_idat_length' => '1880', 'stderr' => '', 'cpu' => { 'decoding' => '0.030', 'other' => '0.090', 'total' => '0.200', 'encoding' => '0.080' }, 'status' => '0', 'idat' => '0.80', 'stdout' => 'stdout from pngcrush will be here', 'size' => '1.56' }, 'p.png' => { 'msg' => undef, 'total_idat_length' => '1880', 'stderr' => '', 'cpu' => { 'decoding' => '0.040', 'other' => '0.030', 'total' => '0.200', 'encoding' => '0.130' }, 'status' => '0', 'idat' => '0.80', 'stdout' => 'pngcrush 1.6.4 blah blah', 'size' => '1.56' } }, 'options' => [ '-d', 'OUT_DIR', '-brute', '1', 'remove', [ 'gAMA', 'cHRM', 'sRGB', 'iCCP' ] ], 'in' => [ 'p.png', 'p2.png' ], '_blah' => 'pooh!', };
The event handler set up to handle the event which you've specified in the event argument to run() method/event will receive input in the $_[ARG0] in a form of a hashref. The possible keys/value of that hashref are as follows:
$_[ARG0]
out
The out key will have a hashref as a value. The keys of that hashref will be filenames of the files which you gave as in argument to run() event/method. The values for each of these keys will either be a scalar containing an error message (if an error occurred) or a hashref containing the exact same hashref run() method of App::PNGCrush module would return. For explanation of keys/values of that hashref see run() method in documentation for App::PNGCrush module.
'options' => [ '-d', 'OUT_DIR', '-brute', '1', 'remove', [ 'gAMA', 'cHRM', 'sRGB', 'iCCP' ] ], 'in' => [ 'p.png', 'p2.png' ],
Valid arguments to run() event/method (that is the options and in arguments) will be present in the output as well.
{ '_blah' => 'foos' }
Any arguments beginning with _ (underscore) passed into the EXAMPLE() event/method will be present intact in the result.
EXAMPLE()
POE, App::PNGCrush
Fork this module on GitHub: https://github.com/zoffixznet/POE-Component-Bundle-WebDevelopment
To report bugs or request features, please use https://github.com/zoffixznet/POE-Component-Bundle-WebDevelopment/issues
If you can't access GitHub, you can email your request to bug-POE-Component-Bundle-WebDevelopment at rt.cpan.org
bug-POE-Component-Bundle-WebDevelopment at rt.cpan.org
Zoffix Znet <zoffix at cpan.org> (http://zoffix.com/, http://haslayout.net/)
You can use and distribute this module under the same terms as Perl itself. See the LICENSE file included in this distribution for complete details.
LICENSE
To install POE::Component::Bundle::WebDevelopment, copy and paste the appropriate command in to your terminal.
cpanm
cpanm POE::Component::Bundle::WebDevelopment
CPAN shell
perl -MCPAN -e shell install POE::Component::Bundle::WebDevelopment
For more information on module installation, please visit the detailed CPAN module installation guide.