フォルダ内画像のカラーモードをスクリプト処理でチェックする
必要に迫られてフォルダ内画像のカラーモードをチェックできるmac用スクリプト書きました。今回は混入したカラーモード違いの画像をハネられればいいのでmacOSに最初から入ってるsipsを使ってます。対応画像形式はjpeg、png、gif、bmp、tif。DTPでまだよく見るEPSはsipsが対応して無いんで対象外です(ImageMagickのidentifyコマンドなら行けるみたい)。
CMYK/グレースケール画像の混入をチェック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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画像の混入をチェック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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に変えただけです。
ターミナルで
1 |
perl imgcolormodecheck.pl [画像フォルダのパス] |
みたいな感じで使えます。誤ったカラーモードの画像の混入があれば
1 2 3 4 |
##ImageFile ColorMode Check Result : Caution! ImageColorMode Error FileName:001.png Caution! ImageColorMode Error FileName:021.png Caution! ImageColorMode Error FileName:029.png |
のようなアラートが出る感じ。
(2019.2.15)