仕事ではAdobe Bridgeを使って画像チェックしていますが、サクッと簡易チェックする場合に使います。
MacBookにインストールしておいて、出先などで使うのも便利です。
ソースを公開します。特別なモジュールは使っていません、使っているのはExifToolですので、インストールしておいて下さい。
perl ExifList.pl 調べるファイル名またはホルダー名 > ~/desktop/list.tsv このようなコマンドをターミナルで打ち込んであげます perl ExifList.pl aaa > list.tsv
以下 ソースファイル (ExifList.pl)
#!/usr/bin/perl # # 印刷適正可能の画像データーか? Exif Dataのリストを作成する # ディレクトリ指定なら、ディレクトリ内のデーター全て # ファイル指定なら、そのファイルのみ # ExifList ファイル名 > リダイレクトファイル.tsv タブ区切りデーター # our $version = "ExifList Ver1.1.0 20210426"; use FindBin; use lib $FindBin::Bin; use strict; use utf8; use Jcode; use Encode; use File::Basename; my $enc_os='utf-8'; # binmode STDIN, ":encoding($enc_os)"; # binmode STDOUT, ":encoding($enc_os)"; # binmode STDERR, ":encoding($enc_os)"; sub decin($) { decode($enc_os, shift) } sub encout($) { encode($enc_os, shift) } sub prt_hdr{print encout("File Name\tColor Mode\tColor Space\tYOKO(dpi)\tTATE(dpi)\tYOKO(pix)\tTATE(pix)\tPixel(万画素)\tYOKO(mm)\tTATE(mm)\n");} my $doc1_str = <<"__DOC1STR__"; 印刷適正可能の画像データーか?調べて Exif Dataのリスト(タブ区切りリスト)を出力する -->ディレクトリ指定なら、ディレクトリ内のデーター全て -->ファイル指定なら、そのファイルのみ 起動方法:ExifList ファイル名 > リダイレクトファイル.tsv タブ区切りデーター __DOC1STR__ sub help{ print encout("\n使い方***\n$doc1_str\n");} #ファイル指示かディレクトリ指示か my $in_path = $ARGV[0]; if ((!(-f $in_path)) && (!(-d $in_path))){ help(); exit;} prt_hdr(); if(-f $in_path){ $in_path = decin($in_path); &print_out(&list($in_path)); } if(-d $in_path){ my @dir = glob("$in_path/*"); #ファイル名をすべて取得する(パス付き) foreach my $rec(@dir){ $rec = decin($rec); if(-f $rec){ &print_out(&list($rec)); } } } #exit; #---------------------------------------------------------------------- sub print_out{ my $exif_rec = $_[0]; print encout("$exif_rec\n"); } sub list{ my $f_path = $_[0]; my $exif_str; my ($x_pix2len, $y_pix2len); my $const_str = ":"; $const_str =~ /(.*):(.*)/; my $img_mime = `exiftool -MimeType '$f_path'`; if( $img_mime !~ /image/){ my ($name, $dir, $ext) = fileparse($f_path); return ("$name 画像ではない"); } #画像ファイルで無ければ戻る my $exif_buff = `exiftool '$f_path'`; #'$f_path'としないとパス名に()などの記号が入っていると動作しない $exif_buff = Encode::decode('utf8', $exif_buff); # utf8フラグ ON 外部入力は encode必要 $exif_buff =~ m/(File Name\s*:\s*)(.+)\n/i; my $file_name = $2; $const_str =~ /(.*):(.*)/; $exif_buff =~ m/(Color Mode\s*:\s*)(.+)\n/i; my $color_mode = $2; $const_str =~ /(.*):(.*)/; $exif_buff =~ m/(Color Space\s+:\s*)(.+)\n/i; my $color_space = $2; $const_str =~ /(.*):(.*)/; $exif_buff =~ m/(Color Space Data\s+:\s*)(.+)\n/i; my $color_space_data = $2; if($color_space eq ""){$color_space = "*".$color_space_data;} $const_str =~ /(.*):(.*)/; $exif_buff =~ m/(X Resolution\s*:\s*)(.+)\n/i; my $x_reso = $2; $const_str =~ /(.*):(.*)/; $exif_buff =~ m/(Y Resolution\s*:\s*)(.+)\n/i; my $y_reso = $2; $const_str =~ /(.*):(.*)/; $exif_buff =~ m/(Image Width\s*:\s*)(.+)\n/i; my $img_width = $2; $const_str =~ /(.*):(.*)/; $exif_buff =~ m/(Image Height\s*:\s*)(.+)\n/i; my $img_height = $2; $const_str =~ /(.*):(.*)/; my $img_size = round(($img_width * $img_height / 10000),0); $img_size = edit_keta($img_size); if($x_reso){$x_pix2len = $img_width * (1 / $x_reso *25.4);} $x_pix2len = edit_keta(round($x_pix2len,2)); if($y_reso){$y_pix2len = $img_height * (1 / $y_reso *25.4);} $y_pix2len = edit_keta(round($y_pix2len,2)); $x_reso = edit_keta($x_reso); $y_reso = edit_keta($y_reso); $img_width = edit_keta($img_width); $img_height = edit_keta($img_height); my @exif_list = ($file_name, $color_mode, $color_space, $x_reso, $y_reso, $img_width, $img_height, $img_size, $x_pix2len, $y_pix2len); # print ("debug $file_name $color_mode $x_reso $y_reso $img_width $img_height $img_size\MB\n"); return join("\t",@exif_list); } ### 四捨五入 ------------------------------------------------- sub round { my $val = shift; # 四捨五入する数 my $col = shift; # 小数点以下のどこまで残すか my $r = 10 ** $col; my $a = ($val > 0) ? 0.5 : -0.5; return int($val * $r + $a) / $r; } ### 3桁カンマ区切り ---------------------------------------- sub edit_keta{ #999999=>999,999 my($kingaku)=@_; 1 while $kingaku =~ s/(.*\d)(\d\d\d)/$1,$2/; return $kingaku; }