#!/usr/bin/perl
#
# easyconv.pl - 画像ファイルリネームスクリプト
#
# Morikawa Yasuhiro <morikawa@ep.sci.hokudai.ac.jp> 2003/10/28
#
# ・ 概要
#
#    1.PNG, 2.PNG 〜 231.PNG といった画像ファイルを
#    サムネイルぐらいの大きさに convert をかけて
#    001s.png, 002s.png 〜 231s.png という風にリネームするスクリプト
#
# ・ 使用法
#
#    画像のあるディレクトリ内で以下のコマンドを使用する.
#
#      $ easyconv.pl
#
#

########################################################
##  デフォルト設定値
########################################################

# 目標とする大きさ
#   convert オプション -geometry <width>x<height> に用いる
$size = "160x120";

# ファイル名の後ろにつける文字
$add_char="s";

# 上書きモード
$override= 0;

# 処理する画像ファイルの形式
@treat = ('gif', 'GIF', 'jpg', 'JPG', 'jpeg', 'JPEG', 'png', 'PNG',
	  'bmp', 'BMP', 'tif', 'TIF', 'tiff', 'TIFF');

########################################################

# カレントディレクトリ内の".", ".."を除く全てのファイルを取得
opendir(DIR, ".");
@allfiles = grep(!/^\.\.?$/, readdir(DIR));
closedir(DIR);

########################################################
##   画像ファイルでなかったり,
##   数字のファイル名でないものを除去
########################################################

foreach $file (@allfiles){
    @file_parts = split(/\./, $file);
    #print STDOUT "file name is $file_parts[0], expand is $file_parts[$#file_parts] \n";
    #
    #  a.gif や ab0.png といったファイル名が含まれている場合は
    #  エラーを返す
    #
    #unless ($file_parts[0] =~ /^\d+$/){
    #	die "このディレクトリには 123.gif のような名前でないファイルが含まれており, 処理を実行できませんでした. \n";
    # }
    #
    #  @treat に含まれていない拡張子の場合はエラーを返す.
    #
    undef $img_ok;
    foreach $imgtype (@treat){
	if ($file_parts[$#file_parts] eq $imgtype){
	    $img_ok = 1;
	}
    }
    unless ($img_ok){
	die "このディレクトリには, このスクリプトではサポートしていない画像形式のファイルが存在するため, 処理を実行できませんでした. \n";
    }
}

######################################################
##  convert をかけてリネーム
######################################################

foreach $file (@allfiles){
    @file_parts = split(/\./, $file);
    $filename = $file_parts[0];
    $imgtype = $file_parts[$#file_parts];

    #
    # 拡張子を小文字にする
    #
    $new_imgtype = $imgtype;
    $new_imgtype =~ tr/A-Z/a-z/;

    $new_filename = "$filename"."$add_char"."\."."$new_imgtype";


    #
    # 既にこのプログラムによって処理されたであろうファイルは除外
    #
    if ($file =~ /^.*${add_char}\.${new_imgtype}$/) {
	    print STDOUT "$file may be already proccesed by This program!!";
	    print STDOUT "\n";
	    next ;
    }


    #
    # 上書き処理するかどうか
    #
    unless ($override) {
	    if (-f $new_filename) {
		    print STDOUT "$file ->< $new_filename is already Exist!!";
		    print STDOUT "\n";
		    next ;
	    }
    }

    system("convert", "-geometry", "$size", "$file", "$new_filename");

    print STDOUT "$file -> $new_filename\.$new_imgtype";
    print STDOUT "\t \[Irregular Rename...\]" if $error == 1;
    print STDOUT "\n";
}

if ($whole_error == 1){
	print STDOUT "いくつかの異常な処理が行われた可能性があります. \n";
} else {
	print STDOUT "処理は正常に終了しました. \n";
}

exit 0;
