必要に迫られてフォルダ内画像のカラーモードをチェックできるmac用スクリプト書きました。今回は混入したカラーモード違いの画像をハネられればいいのでmacOSに最初から入ってるsipsを使ってます。対応画像形式はjpeg、png、gif、bmp、tif。DTPでまだよく見るEPSはsipsが対応して無いんで対象外です(ImageMagickのidentifyコマンドなら行けるみたい)。
CMYK/グレースケール画像の混入をチェック
use utf8;
use Encode qw/encode decode/;
use File::Basename qw/basename dirname/;
use File::Find;
#画像フォルダのパスを取得
$imageFolderPath = $ARGV[0];
$imageFolderPath = decode('UTF-8', $imageFolderPath);
#各画像ファイルへの絶対パスを取得
my @imageFilePaths;
find(&getEachFilePath, $imageFolderPath);
###################チェック処理###################
#ログ出力用変数定義
our $imageColorModeCheckLog = "";
#各imageファイルをチェック
foreach $imageFilePath (@imageFilePaths){
&eachImageFileProceed($imageFilePath);
}
###################ログにタイトル部分を合成###################
if ($imageColorModeCheckLog eq ""){
$imageColorModeCheckLog = '##ImageFile ColorMode Check Result : ' . "\r\n" . 'OK! All Files No Problem!';
} else {
$imageColorModeCheckLog = '##ImageFile ColorMode Check Result : ' . "\r\n" . $imageColorModeCheckLog;
}
###################出力###################
#チェック結果を出力
$imageColorModeCheckLog = encode('UTF-8', $imageColorModeCheckLog);
print $imageColorModeCheckLog . "\n";
exit;
###################サブルーチン###################
#各imageファイルのチェック
sub eachImageFileProceed {
my $imageFilePath = $_[0];
#各imageファイル名を取得
my $imageFileName = basename $imageFilePath;
my $shellCommand = "sips -g space " . $imageFilePath;
my $imageColorSpaceValue = $shellCommand;
unless ($imageColorSpaceValue =~ / space: RGB/){
$imageColorModeCheckLog = ($imageColorModeCheckLog . 'Caution! ImageColorMode Error ' . ' ' . 'FileName:' . $imageFileName . "\n")
}
}
#各imageファイルへの絶対パスを取得
sub getEachFilePath {
my $file = $_;
my $path = $File::Find::name;
push(@imageFilePaths,$path) if ($path =~ /^(.*?).(jpg|jpeg|png|gif|bmp|tif|tiff)$/i);
}
RGB画像の混入をチェック
use utf8;
use Encode qw/encode decode/;
use File::Basename qw/basename dirname/;
use File::Find;
#画像フォルダのパスを取得
$imageFolderPath = $ARGV[0];
$imageFolderPath = decode('UTF-8', $imageFolderPath);
#各画像ファイルへの絶対パスを取得
my @imageFilePaths;
find(&getEachFilePath, $imageFolderPath);
###################チェック処理###################
#ログ出力用変数定義
our $imageColorModeCheckLog = "";
#各imageファイルをチェック
foreach $imageFilePath (@imageFilePaths){
&eachImageFileProceed($imageFilePath);
}
###################ログにタイトル部分を合成###################
if ($imageColorModeCheckLog eq ""){
$imageColorModeCheckLog = '##ImageFile ColorMode Check Result : ' . "\r\n" . 'OK! All Files No Problem!';
} else {
$imageColorModeCheckLog = '##ImageFile ColorMode Check Result : ' . "\r\n" . $imageColorModeCheckLog;
}
###################出力###################
#チェック結果を出力
$imageColorModeCheckLog = encode('UTF-8', $imageColorModeCheckLog);
print $imageColorModeCheckLog . "\n";
exit;
###################サブルーチン###################
#各imageファイルのチェック
sub eachImageFileProceed {
my $imageFilePath = $_[0];
#各imageファイル名を取得
my $imageFileName = basename $imageFilePath;
my $shellCommand = "sips -g space " . $imageFilePath;
my $imageColorSpaceValue = $shellCommand;
if ($imageColorSpaceValue =~ / space: RGB/){
$imageColorModeCheckLog = ($imageColorModeCheckLog . 'Caution! ImageColorMode Error ' . ' ' . 'FileName:' . $imageFileName . "\n")
}
}
#各imageファイルへの絶対パスを取得
sub getEachFilePath {
my $file = $_;
my $path = $File::Find::name;
push(@imageFilePaths,$path) if ($path =~ /^(.*?).(jpg|jpeg|png|gif|bmp|tif|tiff)$/i);
}
なおチェック部分のunlessをifに変えただけです。
ターミナルで
perl imgcolormodecheck.pl [画像フォルダのパス]
みたいな感じで使えます。誤ったカラーモードの画像の混入があれば
##ImageFile ColorMode Check Result :
Caution! ImageColorMode Error FileName:001.png
Caution! ImageColorMode Error FileName:021.png
Caution! ImageColorMode Error FileName:029.png
のようなアラートが出る感じ。