2013年1月6日日曜日

[Perl]ImageMagick

インストール
  1. ImageMagick の Windows binary ファイルダウンロード へ行き、ImageMagick の DLL 版 (ImageMagick-6.8.5-9-Q16-x86-dll.exe) をダウンロードする
  2. インストール時に PerlMagick for ActiveState Perl を選択する


画像ファイルの長辺・短辺を判断
フォルダ内の全画像ファイルに対して、画像の縦横長を調べる
use Image::Magick;
use strict;
use utf8;

# ディレクトリ内のファイルを探索
my $dir = "."; # カレントディレクトリ
my @fileList;
my $file;
opendir(DH, $dir) or die "$dir:$!";
while ($file = readdir DH) {
 next if $file =~ /^\.{1,2}$/; # ., .. を除く
 if ($file =~ /\.jpg$/) {
  # 末尾が jpg のファイルのみ選択する
  print "$file\n";
  push(@fileList, $file);
 }
}
print "\n". "@fileList" . "\n";

my $width, my $height;
foreach $file (@fileList) {
 # インスタンス作成
 my $imgMagick = Image::Magick->new;

 # 画像読み込み
 $imgMagick->Read($file);

 # 縦横幅取得
 ($width, $height) = $imgMagick->Get("width", "height");
 print "$file - Width: $width, Height: $height\n";
}
実行結果
> perl image.pl
a.jpg
b.jpg

a.jpg b.jpg
a.jpg - Width: 2592, Height: 3872
b.jpg - Width: 3872, Height: 2592
画像の長辺を固定幅にそろえる
Perl の Image::Magick モジュールを使ってフォルダ内にある全画像の長辺をすべて 1024 に統一する。
use Image::Magick;
use strict;
use utf8;

# ディレクトリ内のファイルを探索
my $dir = "."; # カレントディレクトリ
my @fileList;
my $file;
opendir(DH, $dir) or die "$dir:$!";
while ($file = readdir DH) {
 next if $file =~ /^\.{1,2}$/; # ., .. を除く
 if ($file =~ /\.jpg$/) {
  # 末尾が jpg のファイルのみ選択する
  print "$file\n";
  push(@fileList, $file);
 }
}
print "\n". "@fileList" . "\n";

my $width, my $height;
foreach $file (@fileList) {
 # インスタンス作成
 my $imgMagick = Image::Magick->new;

 # 画像読み込み
 $imgMagick->Read($file);

 # 縦横幅取得
 ($width, $height) = $imgMagick->Get("width", "height");
 print "$file - Width: $width, Height: $height\n";

 if ($width > $height) {
  $imgMagick->Resize(geometry=>"1024x");
 }
 else {
  $imgMagick->Resize(geometry=>"x1024");
 }
 $imgMagick->Write("f" . $file);
}
実行結果
> perl image.pl
a.jpg
b.jpg

a.jpg b.jpg
a.jpg - Width: 2592, Height: 3872
b.jpg - Width: 3872, Height: 2592
実行後、fa.jpg, fb.jpg というファイルが生成され、それぞれ以下のファイルサイズに変換されている
fa.jpg - Width: 685, Height: 1024
fb.jpg - Width: 1024, Height: 685

0 件のコメント:

コメントを投稿