2019年4月1日月曜日

jpg の Exif (2)

・・・「jpg の Exif」の続き。
クリックだけで動かしたいので仮称 krmgdt を作ってみた。

 

目的:
jpg のExif情報からGPSと年月日時分秒のタグをマウスクリックで確認/消去。
(Debian GNU/Linux 9.8 stretch + KDE にて)

流れ:
1) シェルスクリプト krmgdt.shを作る。
2) /usr/local/bin/に置く。
3) Kメニューからクリックで動くように設定。

作業:
1) シェルスクリプト krmgdt.shを作る。
KDEの kdialog を使ってみる。シェルスクリプトに混ぜて書くと、ウィンドウが開く。
ウィンドウ間の通信には dBus使うらしい。
(他に GnomeのZenityや XのXdialog などがある)
kdialogは、kdebase-binパッケージに含まれているので、KDE環境ならすでにインストール済み。
$ apt show kdebase-bin  ←確認

シェルスクリプトは、先の rmgpsdt.shを元にこんな感じ。

===== krmgdt.sh

#!/bin/bash
kdialog --title krmgdt --msgbox "<h2><font style="background:white">krmgdt</font></h2><hr><font style="background:white">Kdialog remove gps and datetime tags.</font><br>jpgファイルのmetadataから年月日時分秒とGPSのデータを削除<br>該当タグの有無により、続行/ブラウザに戻る/終了 を選択<br><br>[続行] : バックファイルを作り、処理する<br>[終了]/[キャンセル] : 何もせず終了<br>[振出し] : 何もせずファイルブラウザに戻る<br><hr>Shellscript, depends on exiv2, bash, and kdialog."

now_dir=$PWD
# 開く yes OK continue 0,  no 1 キャンセル 2
while ( : )
do
    cd $now_dir
    infile=$(kdialog --title krmgdt --getopenfilename $now_dir "image/jpeg image/jpg")
    ret=$?

    if [ $ret -eq 1 ]; then
        kdialog --title krmgdt --passivepopup "krmgdt: 終了" 3
        break
    fi

    now_dir=$(dirname ${infile})
    ext=${infile##*.}
    date_msg=$`exiv2 -g Date $infile`
    gps_msg=`exiv2 -g GPS $infile`
 
    if [ -z "$date_msg" ] || [ -z "$gps_msg" ]; then
        kdialog --title krmgdt --warningcontinuecancel "$infile\nこのファイルには、該当タグが在りません。" --continue-label "振出し" --cancel-label "終了"
        ret=$?
     
        if [ $ret = 0 ]; then
            continue
        else
            kdialog --title krmgdt --passivepopup "krmgdt: 終了" 3
            exit 0
        fi
    else
        kdialog --title "krmgdt: rm tags" --yesnocancel "<hr><pre>$(exiv2 -g DateTime $infile)\n$(exiv2 -g GPS $infile)</pre><hr>" --yes-label "続行" --no-label "振出し" --cancel-label "終了"
        ret=$?
        if [ $ret = 0 ]; then
            cp --backup=t $infile ${infile%.*}_bak.$ext
            tags=(
            "Exif.Image.DateTime"
            "Exif.Photo.DateTimeOriginal"
            "Exif.Photo.DateTimeDigitized"
            "Exif.Image.GPSTag"
            "Exif.GPSInfo.GPSVersionID"
            "Exif.GPSInfo.GPSLatitudeRef"
            "Exif.GPSInfo.GPSLatitude"
            "Exif.GPSInfo.GPSLongitudeRef"
            "Exif.GPSInfo.GPSLongitude"
            "Exif.GPSInfo.GPSAltitudeRef"
            "Exif.GPSInfo.GPSAltitude"
            "Exif.GPSInfo.GPSTimeStamp"
            "Exif.GPSInfo.GPSSatellites"
            "Exif.GPSInfo.GPSStatus"
            "Exif.GPSInfo.GPSMapDatum"
            "Exif.GPSInfo.GPSDateStamp"
            )
            for tag in ${tags[@]}
            do
                exiv2 -M"del $tag" $infile
            done
            kdialog --title "krmgdt" --passivepopup  "krmgdt: 成功:タグの削除\n\nブラウザに戻る" 5
        elif
           [ $ret = 1 ]; then
            continue
        elif
            [ $ret = 2 ]; then
            kdialog --title krmgdt --passivepopup "krmgdt: 終了" 3
            exit 0
        fi
     
    fi
done
exit 0

=====

2) /usr/local/bin/に置く
実行許可を与えておく。
$ chmod +x krmgdt.sh
"krmgdt.sh を右クリックでプロパティ開いて、パーミッション:実行可能 クリック OK"でも同じ。

$ sudo cp krmgdt.sh /usr/local/bin/

3) Kメニューからマウスクリックで動くように設定。

例) [メニュー][アプリケーション][グラフィックス]に置く
Kメニュー右クリック→アプリケーションを編集→
グラフィックス→新しい項目→項目名[krmgdt] OK →全般{説明:[rm GPS DateTime tag from JPG], アイコン:□検索[shell]から選択, コマンド:フォルダ印から [ルート > usr > local > bin > krmgdt.sh]開く}→上バー[保存]。☒ 終了。

これで、/home/%USER%/.local/share/applications/krmgdt.descktop が作成される。テキスト形式なので追記修正可能。削除も上記のように[メニューの編集]からkrmgdtを右クリックで[削除]保存でメニューから消して、/usr/local/bin/krmgdt.shを消す。krmgdt.desktopも消しておく。

また、ファイルブラウザから、該当.jpg で右クリック→[アプリケーションで開く]に登録しても、Kメニューの[履歴]の中からでも動く。

 

以上、DO素人のメモ

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。