JPEGのEXIFをダイアログボックスで表示No.08833
らる さん 20/09/24 01:18
 
続けての質問すみません。

JPEGのEXIFを見るときはいつも右クリックをしてプロパティから見ています。

スクリプトをツールバーに登録して選択したJPEGのEXIFをダイアログボックスで表示
するスクリプトは実現可能でしょうか?


[ ]
RE:08833 JPEGのEXIFをダイアログボックスNo.08834
秀丸担当 さん 20/09/24 10:15
 

秀丸ファイラーClassicの機能としては、Exif情報を取り出す機能そのものは無いです。

スクリプトでは、既に詳細表示に表示されているとき、GetItemTextメソッドで取得
する方法があります。
(ヘルプのスクリプトの例の「詳細表示をTSV化してクリップボードにコピー」が参考)

「名前の変更(一括)」のダイアログでは「*<撮影日時>」のようにして取り出す方法
があります。

これと同じように、詳細表示に無くて、単純にスクリプトであるプロパティの情報を
取り出すとしたら、秀丸ファイラーClassicの機能としうわけではないですが、WSHで
使われるのと同じような方法が使えます。
以下はWeb検索してWSHでExifとかを参考にして、撮影日時を出すようにしてみた例で
す。
秀丸ファイラーClassic独自のこととしては、選択されたファイル名を得るためにGet
NextItem(-1,2)やGetItemPath(iItem)を使っているだけになります。

//「js:C:\folder\test.js」のようにしてブックマークに登録
iItem=GetNextItem(-1,2);
if(iItem>=0){
    objFso = new ActiveXObject("Scripting.FileSystemObject");
    strBase = objFso.GetFileName(GetItemPath(iItem))
    objShell = new ActiveXObject("Shell.Application");
    objFolder = objShell.NameSpace(GetDirectory());
    objItem = objFolder.ParseName(strBase);
    for(i=0;i<1000;i++){
        if(objFolder.GetDetailsOf("",i)=="撮影日時" ) {
            Message(objFolder.GetDetailsOf(objItem,i) );
            break;
        }
    }
}

 

[ ]
RE:08834 JPEGのEXIFをダイアログボックスNo.08835
らる さん 20/09/24 11:03
 
すみません、WSHとかプログラム的なことはよく分からなく
ただexifなどメタデータを拾得して情報を別ウィンドウに出力するだけなら
スクリプトというか秀丸エディタで言うマクロでも可能なのかと思い質問してみまし
た。
Chromeのアドレスバーにjavascript:alert(document.lastModified);と打つと
webページの最終更新日時が別ウィンドウで表示されるのを見て構想しました。

秀丸ファイラー本体に機能追加しないとできないほどプログラム的に難しいんですか?
利用想定としてはデジカメで撮った写真のISO感度とかシャッタースピードとか
少ないステップで確認するためです。
詳細表示ならソートに登録すればすぐに分かるんですが画像がアイコンになってしま
うので。
一番理想としてはプレビュー枠の余白に任意のメタデータを表示できたら
一番なんですが。


[ ]
RE:08835 JPEGのEXIFをダイアログボックスNo.08836
秀丸担当 さん 20/09/24 13:38
 

他のプロパティも表示するとしたら以下のような感じになります。

s="";
iItem=GetNextItem(-1,2);
if(iItem>=0){
    objFso = new ActiveXObject("Scripting.FileSystemObject");
    strBase = objFso.GetFileName(GetItemPath(iItem))
    objShell = new ActiveXObject("Shell.Application");
    objFolder = objShell.NameSpace(GetDirectory());
    objItem = objFolder.ParseName(strBase);
    for(i=0;i<1000;i++){
        propname=objFolder.GetDetailsOf("",i);
        if(propname=="撮影日時"
         ||propname=="ISO 速度"
         ||propname=="露出時間"
         ) {
            s=s+propname+" : "+objFolder.GetDetailsOf(objItem,i)+"\n";
        }
    }
}
Message(s);
 

スクリプトに新しいメソッドを追加したら、もう少し簡略に書けるかもしれません。
例えば仮にGetPropertyというメソッドを追加したとして、以下のようにできるとか。
Message( GetProperty(GetItemPath(iItem),"撮影日時") );
とはいえ一行で書けるわけではないので、上記スクリプトと大差ないかもしれないで
す。

詳細表示じゃないときでも表示するとしたら、レジストリをいじってエクスプローラ
とも共通のステータスバーに表示する情報を変える方法も考えれますが、これをいじ
るのは難しいと思います。
参考までに、HKEY_CLASSES_ROOTの配下にある拡張子に対応するInfoTipというところ
の情報を変えるとできたりするようです。

[ ]
RE:08836 JPEGのEXIFをダイアログボックスNo.08837
らる さん 20/09/24 14:22
 
上記のスクリプトをtest.jsという名前でファイルを作り
ツールの整理からスクリプトを参照でtest.jsを登録して任意のjpegを選択して
スクリプトを実行したらエラーが表示されました


エラー内容は

終了していない文字列型の定数です。
行番号:11
エラーコード:0/0 0x800a03f7

ブックマークに整理から同じ手順で登録しましたが同じエラーが出ました。


[ ]
RE:08837 JPEGのEXIFをダイアログボックスNo.08838
秀丸担当 さん 20/09/24 14:38
 

日本語の部分の行のエラーで、おそらくテキストファイルをUnicode(UTF-8)のBOMな
しで保存されているためだと思います。
Unicode(UTF-16)のBOMありで保存すると確実です。
またはShift-JISでもいいです。

UTF-8のBOMありは対応していなかったので、対応を検討しようと思います。UTF-8のB
OMありの場合は現状だと一行目でエラーになります。
UTF-8のBOMなしは解析して判定する必要があって、UTF-8のBOMなしの対応はやめてお
こうと思います。

[ ]
RE:08838 JPEGのEXIFをダイアログボックスNo.08839
らる さん 20/09/24 15:03
 
確認したとこたしかにUTF-8のBOMなしでshift-jisで保存したところ正常にスクリプ
トが動作しました。
まさに望んだ通りの動作でおかげで確認作業が楽になりました。
ありがとうございました。

UTF-8のBOMなしが一番無難でトラブルが少ないと思ってデフォルトにしてたんですが
文字エンコードが原因とはびっくりしました。

[ ]