晴歩雨描

晴れた日は外に出て歩き、雨の日は部屋で絵を描く

パナソニックのデジカメ写真のEXIFから、フォトスタイル、クリエイティブコントロール情報を抜き出して、画像ファイル名にEXIF情報を付け足す。(ExifTool/JScript)

先日、ソニーのデジカメ写真のEXIFから、クリエイティブスタイル、ピクチャーエフェクト情報を抜き出して、画像ファイル名にEXIF情報を付け足すJScriptを作成した。

今回、パナソニックのデジカメ写真のEXIFから、フォトスタイル、クリエイティブコントロール情報を抜き出して、画像ファイル名にEXIF情報を付け足すJScriptを作成。

前提としてExifToolを使うが、そのインストール方法等は上のブログ記事を参照。

exiftool.exeのデスクトップに置くショートカットのリンク先は次のように設定する。

C:\Windows\exiftool.exe -k -PhotoStyle -makernotes:contrast -makernotes:saturation -makernotes:sharpness -AdvancedSceneMode

このショートカットアイコンに、画像ファイルを複数まとめてドラッグ&ドロップすると、コマンドプロンプトに似たウインドウが開いて、まとめて結果が表示される。

※ 一度にウインドウに表示できる行数に制限がある模様。1度にドラッグ&ドロップする画像ファイルは40個以内にした方が良い。

f:id:art2nd:20181221142044j:plain

このウインドウに表示された結果テキストをCtrl-A、Ctrl-Cでコピーし、exif2ren.jseと同じフォルダにあるdata.txtを開いてペーストし保存する。

exif2ren.jseアイコンをダブルクリックして実行すると、out.txtというファイルが作成される。

作成されたout.txtの中身を開くと、以下の「out.txt サンプル」のように、renameコマンドが書かれている。

Contrast、Saturation、Sharpnessの補正がある場合、頭文字+補正値で表現する。ただ、Saturation、SharpnessはどちらもSで始まるので、それぞれ、tとpにした。c-2 t+2 p+2のように表現。

renameコマンドに問題が無いかを確認した上で、コマンドプロンプトへ、renameコマンドをコピー&ペーストで実行する。

※ このスクリプトを使う場合は、自己責任でお願いいたします。また、事前に画像ファイルのバックアップを取った上で利用願います。

【data.txt サンプル:exiftoolの結果】

======== C:/work/exiftool/data/P1310956.JPG
Photo Style                     : Standard or Custom
Contrast                        : Normal
Saturation                      : Normal
Sharpness                       : Normal
Advanced Scene Mode             : Monochrome
======== C:/work/exiftool/data/P1310957.JPG
Photo Style                     : Standard or Custom
Contrast                        : Normal
Saturation                      : Normal
Sharpness                       : Normal
Advanced Scene Mode             : Dynamic Monochrome
======== C:/work/exiftool/data/P1310960.JPG
Photo Style                     : Standard or Custom
Contrast                        : Normal
Saturation                      : Normal
Sharpness                       : Normal
Advanced Scene Mode             : Rough Monochrome
======== C:/work/exiftool/data/P1310961.JPG
Photo Style                     : Standard or Custom
Contrast                        : Normal
Saturation                      : Normal
Sharpness                       : Normal
Advanced Scene Mode             : Silky Monochrome
    4 image files read
-- press RETURN --

【out.txt サンプル】

rename C:\work\exiftool\data\P1310956.JPG P1310956_Monochrome.JPG
rename C:\work\exiftool\data\P1310957.JPG P1310957_DynamicMonochrome.JPG
rename C:\work\exiftool\data\P1310960.JPG P1310960_RoughMonochrome.JPG
rename C:\work\exiftool\data\P1310961.JPG P1310961_SilkyMonochrome.JPG

スクリプトコード:exif2ren.jse】

ソニー用のスクリプトに処理を追加している。ソニー用にも使える。

var fs = WScript.CreateObject("Scripting.FileSystemObject");
var ts = fs.OpenTextFile("data.txt"); 
var str = ts.ReadAll();
str = str.replace(/\n /g, '\n\n--------');
str = str.replace(/\n/g, '').replace(/\r/g, '');
str = str.replace(/: /g, '');
str = str.replace(/-- press RETURN --/g, '');
str = str.replace(/--/g, '\n\n');
str = str.replace(/ /g, '');
str = str.replace(/CreativeStyle/g, ' _');
str = str.replace(/PictureEffect/g, '_');
str = str.replace(/PhotoStyle/g, ' _');
str = str.replace(/AdvancedSceneMode/g, '_');
str = str.replace(/Contrast/g, '_c');
str = str.replace(/Saturation/g, '_t');
str = str.replace(/Sharpness/g, '_p');
str = str.replace(/\(/g, '_').replace(/\)/g, '');
str = str.replace(/StandardorCustom/g, '');
str = str.replace(/_Standard/g, '');
str = str.replace(/_Off/g, '');
str = str.replace(/&/g, '');
str = str.replace(/_c0/g, '').replace(/_t0/g, '').replace(/_p0/g, '');
str = str.replace(/_cNormal/g, '').replace(/_tNormal/g, '').replace(/_pNormal/g, '');
str = str.replace(/__/g, '_');
str = str.replace(/========/g, '\nrename ');
var line_ary = str.split(/\n/);
var out = '';
for (var i=0; i<line_ary.length; i++) {
	var buf = line_ary[i].split(/\.| /);
	if (buf[3] && buf[3] != '_') {
		fn_ary = buf[1].split('\/');
		out += buf[0] + ' ' + buf[1] + '.' + buf[2] + ' ' + fn_ary[fn_ary.length-1] + buf[3] + '.' + buf[2] + '\n';
	}
}
out = out.replace(/\//g, '\\');
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var outfile = fso.CreateTextFile("out.txt", true, true);
outfile.Write(out);