Edited at

フォルダ内画像のカラーモードをスクリプト処理でチェックする

 必要に迫られてフォルダ内画像のカラーモードをチェックできる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

 のようなアラートが出る感じ。