2019年3月23日土曜日

jpg の Exif

Exifタグのメモ (Debian/GNU Linux Stretchにて)

・jpg, tiffのメタデータは、Exifだけじゃない。

Exif
 Exchangeable image file format 日本電子工業振興協会 (JEIDA)で規格化 JPEG, TIFF
https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.html

DCF
 Design rule for Camera File system IPTC(国際新聞通信委員会) JPEG

IPTC
 International Press Telecommunications Council Photo Metadata IPTC(国際新聞通信委員会)

XMP
 Extensible Metadata Platform アドビ

Exif 出力例 (値はダミー)
DateTime 年月日時分秒
 Exif.Image.DateTime               Ascii      20  2019:03:16 00:00:00
 Exif.Photo.DateTimeOriginal       Ascii      20  2019:03:16 00:00:00
 Exif.Photo.DateTimeDigitized      Ascii      20  2019:03:16 00:00:00


GPS 場所
 Exif.Image.GPSTag                 Long        1  11126
 Exif.GPSInfo.GPSVersionID         Byte        4  2.3.0.0
 Exif.GPSInfo.GPSLatitudeRef       Ascii       2  North
 Exif.GPSInfo.GPSLatitude          Rational    3  29deg 47.39000'
 Exif.GPSInfo.GPSLongitudeRef      Ascii       2  East
 Exif.GPSInfo.GPSLongitude         Rational    3  140deg 20.31000'
 Exif.GPSInfo.GPSAltitudeRef       Byte        1  Above sea level
 Exif.GPSInfo.GPSAltitude          Rational    1  03.6 m
 Exif.GPSInfo.GPSTimeStamp         Rational    3  06:07:08
 Exif.GPSInfo.GPSSatellites        Ascii       1
 Exif.GPSInfo.GPSStatus            Ascii       2  Measurement in progress
 Exif.GPSInfo.GPSMapDatum          Ascii       7  WGS-84
 Exif.GPSInfo.GPSDateStamp         Ascii      11  2019:02:19


GPSInfoタグにも年月日 GPSDateStampと時分秒 GPSTimeStampの2タグがあるので、日時 DateTimeだけを変更削除してもGPSタグで日時を推測される可能性がある。

Exif Version 2.3 http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf によれば、GPSタグが26個、下で説明の、exiv2 では30個を認識 https://exiv2.org/tags.html する。GPSタグと言ってもすべてが記録されるわけでもなく、位置情報に関するものも限られる。
更に、カメラメーカーによる独自タグもあり、Canon, Sony, Nikon, ...の名前がタグごとに入っていて、機種やレンズ、シャタースピード、露出などの撮影情報が含まれる。Canon, Sony, Nikonで眺めた限り、GPSや日時に関するものは はなかった。

"Exif.GPSInfo.GPSDateStamp"タグについては調べたほうがいいかも。
exiv2 -g Exif.GPSInfo.GPSDateStamp file.jpg して、消したほうがいいかも。



・タグの編集プログラム
注) Debianなので各コマンドのバージョンは古め。以下出力例はダミーです。

digikam
1ファイルづつタグの編集ができるらしい。KDE絡みで多量のファイルが同時インストールされるのが個人的に嫌だったので・・・試してない。

jhead
$ jhead -ts2019:03:16-00:00:00 *.jpg  ←日時の変更ts time set. DateTimeの3tagsを変える
$ jhead -purejpg M2380005.JPG           ←exif情報を全部消す

exiftool
GPSとDateTimeを弄るなら、これだけで十分。libimage-exiftool-perlパッケージ。LinuxのGUI版はpyExifToolGUIをperlでmakeインストールできそうでも面倒。
$ exiftool -gps:all= -xmp:geotag= image.jpg            ←GPSタグの削除
$ exiftool -AllDates="2019:03:16 12:34:56"          ← AllDatesは、DateTimeの 3tags
$ exiftool MVI_02001.MP4                                     ← mp4 のmetadataも表示できる

exiv2
$ exiv2 IMG_0079.JPG                       ←基本的な情報のみ表示
File name       : IMG_0079.JPG
File size       : 10
...略

$ exiv2 -pa IMG_0079.JPG                 ←exiv2で認識できる Exif, IPTC, XMPを全部表示
Exif.Image.Make                              Ascii       6  Camon
Exif.Image.Model                             Ascii      24  Camon PowerShut SiX70 H8
...略

$ exiv2 -g DateTime IMG_00251.jpg     ← -g で検索表示,大小文字区別
Exif.Image.DateTime                  ....略
Exif.Photo.DateTimeOriginal
Exif.Photo.DateTimeDigitized 

$ exiv2 ad -a 01:00:00 IMG_00251.jpg  ← DateTimeのタグ値 3つを01:00:00にする. ad adjust, -a 01:00:00 time adjust)

$ exiv2 rename img_1234.jpg                ← ファイル名を年月日時分秒にする
Renames img_1234.jpg (taken on 13−Nov−05 at 22:58:31) to 20051113_225831.jpg

$ exiv2 −r’:basename:_%Y%m’ rename img_1234.jpg    ←ファイル名に年月を付加
Renames img_1234.jpg to img_1234_200511.jpg

$ exiv2 -de rm demo.jpg          ← Exif情報だけ全部消す (-d delete, e Exif, i IPTC, x XMP)

$ exiv2 rm M2400011.JPG      ←メタ情報を全部消す

$ exiv2 -M"del Exif.GPSInfo.GPSLatitudeRef" image.jpg ←Exif.GPSInfo.GPSLatitudeRef タグを消す(値も)
-M"コマンド"ではワイルドカードが使えない。

...そこで、GPSとDateTimeの16個のタグを消すシェルスクリプト例。
注意:
 * Debianで'ls -l /bin/sh' は /bin/dash にリンクされているので配列が動かない。#!/bin/bashとする。
 * ファイル名にワイルドカードが使えない。
 * ファイル名_bak.jpgは、バックアアップ用の元ファイル。
=====  rmgpsdt.sh
#!/bin/bash

infile="$1"
ext=${infile##*.}

if [ $# -ne 1 ] ; then
    echo "argument count error."
    echo "command: rmgpsdt.sh one_file.jpg"
    echo "  remove GPS and DateTime Tags from Exif, depends on exiv2 and bash."
    exit 7
elif [ ! -e $infile ]; then
    echo "file not exist : $infile"
    exit 2
elif [ ${ext,,} != "jpg" ]; then
    echo "not jpg file : $infile"
    exit 1
else
    date_msg=`exiv2 -g Date $infile`
    gps_msg=`exiv2 -g GPS $infile`
    if [ -z "$date_msg" ] || [ -z "$gps_msg" ]; then
        echo "DateTime, GPS tags not in $infile."
        exit 1
    fi
fi

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
echo "done"
=====
・・・まだ、いろいろあるけど・・・試してない
raw現像ソフト rawtherapee もmetadataを個別に消せる...何故か消せない。

その他

file
file コマンドでも結構な情報。当然編集はできない。

$ file M2380002.JPG
M2380002.JPG: JPEG image data, Exif standard: [TIFF image data, little-endian, direntries=10, manufacturer=Pandason, model=HC-VG60M, orientation=upper-left, xresolution=154, yresolution=162, resolutionunit=2, software=Ver.1.00 , datetime=2016:12:34 12:34:56], baseline, precision 8, 3200x1800, frames 3

$ file IMG_109.JPG
IMG_0096.JPG: JPEG image data, Exif standard: [TIFF image data, little-endian, direntries=12, manufacturer=Camon, model=Camon PowerShut SiX70 H8, orientation=upper-left, xresolution=196, yresolution=204, resolutionunit=2, datetime=2018:03:20 10:09:08], baseline, precision 8, 5184x2912, frames 3

・google傘下のここbloggerでは、exifはweb表示時点で一切消されてる。消した情報をgoogleがどう扱っているかは不明。

以上、素人メモ・・・追加:続編 jpg の Exif (2)

0 件のコメント:

コメントを投稿

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