Plagger::Plugin::Filter::ImageResizeなるものを作った。
利用用途としては携帯のパケット量が気になる方や
androidなどの端末でリサイズする時に時間が気になる方向け。

私は画像入りfeedなどをgmailのようにメールで読む時
大きなサイズの画像などはリサイズ処理がかかるが
この処理時間がちとイライラしていたので
なんとかならないかといろいろサイトを見ていた。

昔にだれか公開していたと思うのだが
いくら探してもなかなか出てこないため作ってみた。

package Plagger::Plugin::Filter::ImageResize;
use strict;
use warnings;
use base qw (Plagger::Plugin);

use Image::Magick;

sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
'update.entry.fixup' => \&filter,
);
}

sub init {
my $self = shift;
$self->SUPER::init(@_);

$self->conf->{width} or Plagger->context->error("config 'width' is not set.");
}

sub filter {
my($self, $context, $args) = @_;

my $conf_width = $self->conf->{width};

for my $enclosure ($args->{entry}->enclosures) {
my $image = Image::Magick->new;
my $local_path = $enclosure->local_path;
unless ($local_path) {
$context->log(warn => "\$enclosure->local_path is not set. You need to load Filter::FetchEnclosure to use this plugin.");
return;
}
$context->log(debug => "Load Image $local_path...");
$image->Read($local_path);
my $org_local_image_size = $image->Get('width') ;
$context->log(debug => "Image Size $org_local_image_size");
$context->log(debug => "Resize Size $conf_width");
if ($org_local_image_size > $conf_width){
$context->log(debug => "Image Width Bigger...");
$image->Scale(geometry=>$conf_width);
$image->Write($local_path);
}
undef $image;
}
}

1;

でyaml的にはこんな感じ。

- module: Filter::ImageResize
config:
width: 280

とりあえず適当なPluginをパクッてます。

基本的に"見る向き"の横幅を基本にするため
そこしか設定する箇所がありません。

ソース読んで頂ければわかると思うけど
ImageMagickとImageMagick-perlが必要。

LogLevelをdebugにすると詳細な動きが出てきます。

他にも"画質を落とす"などもできると思いますが
取り合えず自分的には満足したので
必要な方はご自身で追加してみてください。

久々に組んでみたら結構時間がかかってしまった。
もう年かなぁ。