2011年9月26日月曜日

Plagger野良プラグイン作成

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にすると詳細な動きが出てきます。

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

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

0 件のコメント:

コメントを投稿

Windows10 1803の再インストールした時のメモ

今日はちょっとしたメモを残そうと思って書き込みしています。 事の発端は大きいファイルを整理している最中にエラーが頻発した事から始まります。