プラグイン書き書き
package Tangerine::Plugin::Evangeline::Image; use strict; use warnings; use version; our $VERSION = qv('0.1.0'); use Class::InsideOut qw/private register id/; use Image::Magick; use Tangerine::Core::Carp qw/croak/; private _im => my %_im; private _file => my %_file; sub new { my $self = register shift; my %arg = @_; $_file{id $self} = $arg{file}; $_im{id $self} = Image::Magick->new or croak "constract: $!"; my $err = $_im{id $self}->Read($arg{file}); croak $err if $err; return $self; } sub get { my $self = shift; my @attrs = @_; return $_im{id $self}->Get(@attrs) or croak $!; } sub thumbnail { my $self = shift; my %args = @_; my $thumb= $self->_clone; $args{width} && $args{height} or croak; my $err = $_im{id $thumb}->Resize(geometry => "$args{width}x$args{height}"); croak $err if $err; return $thumb; } sub _clone { my $self = shift; my $class = ref $self or croak "can't call as class method"; my $clone = register $class; $_im{id $clone} = $_im{id $self}->Clone; $_file{id $clone} = $_file{id $self}; return $clone; } sub write { my $self = shift; my %args = @_; my $out = $args{file}; ($out = $_file{id $self}) =~ s/\.\w+$/.thumb.jpg/ unless $out; my $err = $_im{id $self}->Write($out); croak $err if $err; return 1; } 1;
クローン作成なんて始めて書いた。といってもほとんどやってることもないけど。