2010年3月4日木曜日

CentOSにてImage::Magickでサムネール作成(WorkerManager)

スズキです。

"CentOS & WorkerManager"ネタも、これで一段落でしょうか...

とりあえずyumで調べてみると、別々のリポジトリに
ImageMagickとImageMagick2というものが見つかりました。

# yum info ImageMagick
...
Version : 6.2.8.0
...
Repo : base
...

# yum info ImageMagick2
...
Version : 6.5.5.6
...
Repo : remi
...

上記のように、詳しく調べると、ImageMagick2のほうがバージョンが高かったので、
こちらをインストールすることにしました。

# yum install ImageMagick2-perl

実際には、下記のように(サムネールの作成)利用することができます。

> use Image::Magick;
> ...
> my $image = Image::Magick->new;
> $image->Read($src_file);
> $image->Thumbnail(width => 100, height => 100);
> $image->Write($jpg_file);

WorkerManagerでのコード(全体)は次のような感じです。

--------【Perl】--------
use strict;
use warnings;
use base qw(TheSchwartz::Worker);
use TheSchwartz::Job;
use Image::Magick;
use Log::Dispatch;
use constant BASE_PATH => "/var/www/html/master";

sub work {

  # ログの設定
  my $log = Log::Dispatch->new(outputs => [[
    "Screen",
    min_level => 'debug',
    stderr => 1,
    newline => 1
  ]]);

  # パラメータの取得
  my $class = shift;
  my TheSchwartz::Job $job = shift;
  my $material_id = $job->arg->{material_id};
  my $material_ext = "jpg";

  # サムネール作成元画像
  my $src_file = BASE_PATH . "/" . $material_id . "." . $material_ext;
  $log->debug("src_file: " . $src_file);
  # サムネール作成先画像
  my $jpg_file = BASE_PATH . "/" . $material_id . ".jpg";
  $log->debug("jpg_file: " . $jpg_file);

  # サムネールの作成
  my $image = Image::Magick->new;
  $image->Read($src_file); # 元画像の読み込み
  $image->Thumbnail(width => 100, height => 100); # サムネールの作成
  $image->Write($jpg_file); # サムネールの書き出し
  $job->completed();

}

sub max_retries { 3 }
sub retry_delay { 20 }

1;
--------

明日には、iPhone開発にもどりたいなー...

--------
http://www.suz-lab.com

0 コメント: