制作動機
こんなことを考えて作りました。
- iPhoneの「カメラ」で撮影した写真には、撮影情報(EXIF)として位置情報を記録できる([設定]−「位置情報サービス」で変更可能)。位置情報がついたままの写真をネットに公開すると、場合によっては自宅の場所を公開してしまうなどになりかねない。はてなフォトライフでは位置情報を非表示にできるが、写真データ内の位置情報は削除されない(idea:25625参照)。
- iPhoneの「カメラ」以外のアプリで撮影した写真には、撮影日時や機種情報、シャッター速度などの撮影情報(EXIF)が入っていないことがある。これは場合によっては取り回しに不便がある。たとえばはてなフォトライフにアップロードすると、写真ページのURLは撮影日時ではなくアップした日時をもとにして作られてしまいスマートでない。
利用に必要なもの
「noGPS4iPhone」のソースリスト
bashのシェルスクリプトなので、Automator以外で使うときは1行目に「#!/bin/bash」をつけるとたぶんよい。
export PATH=/opt/local/bin:/opt/local/sbin:$PATH TODAY=`date "+%Y%m%d"` for f in "$@" do DATE_YYYYMMDDHHMI_SS=`stat -f "%m%t%Sm" -t "%Y%m%d%H%M.%S" "$f" |cut -f2-` #元ファイルのタイムスタンプを取得しておく NEWFILENAME=${f%/*}/noGPS_${f##*/} #新しいファイルのファイル名は「ファイルのパス + "noGPS_" + 元のファイル名」 cp "$f" ${NEWFILENAME} #元のファイルをコピーしておく exiftool -overwrite_original -geotag= ${NEWFILENAME} #位置情報を削除する touch -t ${DATE_YYYYMMDDHHMI_SS} ${NEWFILENAME} #位置情報が削除された新しいファイルのタイムスタンプを元ファイルのタイムスタンプと同じにする done
このスクリプトでは、元ファイルをコピーしておいてわざわざ「-overwrite_original」オプションをつけています。このオプションをつけないとExifToolは元ファイルを別名でバックアップしてくれるのだけど、これが「元ファイル名.元拡張子_original」という形式になってしまいます。
拡張子が「jpg」から「jpg_original」に変わってしまうのがいやなので、上のような処理にしているのでした。
ソースリスト内の「exiftool(…)-geotag=」を「exiftool(…)-gps:all=」にすると、カメラの向きの情報も削除します(カメラの向きが記録されるのは電子コンパスが内蔵されているiPhone 3GS以降)。
「addEXIF4iPhone」のソースリスト
これもAutomator以外で使うときは1行目に「#!/bin/bash」をつけるとたぶんよい。
export PATH=/opt/local/bin:/opt/local/sbin:$PATH TODAY=`date "+%Y%m%d"` for f in "$@" do DATE_YYYYMMDDHHMISS=`stat -f "%m%t%Sm" -t "%Y/%m/%d %H:%M:%S" "$f" |cut -f2-` #元ファイルのタイムスタンプを取得しておく(1) DATE_YYYYMMDDHHMI_SS=`stat -f "%m%t%Sm" -t "%Y%m%d%H%M.%S" "$f" |cut -f2-` #元ファイルのタイムスタンプを取得しておく(2) NEWFILENAME=${f%/*}/exif_${f##*/} #新しいファイルのファイル名は「ファイルのパス + "exif_" + 元のファイル名」 MODEL="iPhone 4S" #ここは自分の機種に合わせて cp "$f" ${NEWFILENAME} #元のファイルをコピーしておく exiftool -overwrite_original -Make=Apple -Model="$MODEL" -ALLDates="${DATE_YYYYMMDDHHMISS}" ${NEWFILENAME} #メーカー名「Apple」、機種名「iPhone 4S」、撮影日時(元ファイルのタイムスタンプ1)を書き込む touch -t ${DATE_YYYYMMDDHHMI_SS} ${NEWFILENAME} #EXIF情報が書き込まれた新しいファイルのタイムスタンプを元ファイルのタイムスタンプ(2)と同じにする done
スクリプトをどうやってアプリケーションにするの
MacではAutomatorを使って、シェルスクリプトをアプリケーションにします。
- Automatorを起動
- 「書類の種類を選択してください:」で「アプリケーション」を選んで[選択]ボタンをクリック
- 「名称未設定(アプリケーション)」が開く
- 左端のペイン内「ライブラリ」−「ユーティリティ」を選択
- 左から2番目のペイン内「シェルスクリプトを実行」を、右の「ワークフローを作成するには、ここにアクションまたはファイルをドラッグしてください」へドラッグ&ドロップ
- 右ペインに「シェルスクリプトを実行」アクションが配置される
- 「シェル」が「/bin/bash」になっていることを確認
- 「入力の引き渡し方法」は「引数として」を選択
- 「for f in "$@"」…と表示されたスクリプト記入欄をいったんすべて消去し、上のスクリプトのどちらかを入力
- 「ファイル」メニューから「別名で保存」を選択、「noGPS4iPhone.app」や「addEXIF4iPhone.app」といったファイル名で保存(ファイル名は自由)
アプリケーションの使い方
保存したアプリケーションをダブルクリックしてもなにも起きません。これはファイルをドラッグ&ドロップして使うアプリです。
アプリケーションに画像ファイルをドラッグ&ドロップすると、EXIFの一部が削除または付加された画像ファイルが作られます。元のファイルはそのままです。複数の画像ファイルをまとめて処理することもできます。
- before
- after
- 「noGPS4iPhone」の処理
- 元ファイルと同じフォルダに、画像ファイル内の位置情報が削除されたファイルが作られます。新しいファイルのファイル名は「noGPS_元のファイル名」です。
- 「addEXIF4iPhone」
- 元ファイルと同じフォルダに、画像ファイルのタイムスタンプが撮影日時として書き込まれたファイルが作られます。新しいファイルのファイル名は「EXIF_元のファイル名」です。また新しいファイルには同時に撮影機種の情報として、メーカー名「Apple」、機種名「iPhone 4S」も書き込まれます。たとえばiPhone 3GSをお使いの方はスクリプト内の「MODEL="iPhone 4S"」の部分を「MODEL="iPhone 3GS"」に書き換えてください。iPhone 3Gの方は「iPhone」または「iPhone 3G」です(iOSのバージョンによるようです)。またiPod touchだと「iPod touch」です。これでわかるようにメーカー名や機種名は自己申告なので、好きなメーカー名やカメラの名前を入れることもできます。メーカー名「Anaheim Electronics」、機種名「RX-78-2」でもOKです。
なお「addEXIF4iPhone」を使っても、シャッター速度や絞り、ISOなどの情報は(元の画像に入っておらず知る方法もないため)書き込まれません。
また新しく作られるファイルのファイル名を変更したいときは、「NEWFILENAME=${f%/*}/noGPS_${f##*/}」や「NEWFILENAME=${f%/*}/exif_${f##*/}」といったところを変更します。ここで元のファイル名の後ろに文字列を追加した場合、拡張子が変化します。
下の画像は、位置情報つきの写真を「noGPS4iPhone」に通したときのEXIFの変化を「Reveal」で見たものです。
- before
- after
Windowsではどうするの(1)noGPS4iPhoneをWindowsで
Windows版のExifToolsをダウンロードしてファイルを解凍すると「exiftool(-k).exe」というファイルだけが出てきます。「(-k)」のところに好きなオプションを入れてリネームすればその処理をするプログラムになり、そこへ写真をドラッグ&ドロップすればオプションの通りに処理されるというしくみです。
「exiftool(-k).exe」というもとのファイル名を「exiftool(-geotag=).exe」にして、そこに写真をドラッグ&ドロップすれば、位置情報が削除された画像ファイルが作られます。
なおファイル名を「exiftool(-gps:all=).exe」にはできません。Windowsではファイル名に「:」を使えないからです。「exiftool(-k).exe」を「exiftool.exe」にリネームして、同じフォルダに「exiftool.exe -gps:all= %1」というバッチファイルを作ればいいのかも。
exiftool.exeを通すとファイルのタイムスタンプが処理した時刻に変わってしまうので、EXIF内の撮影時刻に戻したいときは別のソフトを使います。「F6 Exif」や「Flexible Renamer」は、ファイルのタイムスタンプを撮影時刻に合わせることができます。
- F6 Exif:ファイル更新日時(タイムスタンプ)をEXIF撮影日時で復元(http://www.ryouto.jp/f6exif/table09.html)
- Flexible Renamer(http://hp.vector.co.jp/authors/VA014830/FlexRena/)
Windowsではどうするの(2)addEXIF4iPhoneをWindowsで
ExifToolsにファイルのタイムスタンプを渡す方法を調べていないので、「F6 Tools」をとりあえず勧めておきます。
- F6 Exif 〜EXIF編集ソフト〜(http://www.ryouto.jp/f6exif/)
WindowsのExifToolsで複数ファイルにまとめてEXIFを埋め込みたい、という人は「google:バッチファイル タイムスタンプ 取得」などで検索してみてください。
ExifToolsでの書式は「exiftools.exe -Make="メーカー名" -Model="機種名" -ALLDates="YYYY:MM:DD HH:MM:SS"」です。
画像のEXIF情報を閲覧/編集できるソフトで結果を確認
スクリプトで作られた新しいファイルのEXIFを確認するには、「Reveal」を使うのが便利です。
- Reveal - Album Shaper(http://albumshaper.sourceforge.net/)
起動すると表示されるウィンドウに画像ファイルをドラッグ&ドロップすると、撮影機種名や撮影日時、シャッター速度や位置情報などを見ることができます。このとき「Edit」ボタンをクリックするとEXIF情報を編集できます。
「あれ? じゃあスクリプトを用意しなくてもこれを使えばいいのでは?」
はい、EXIFを編集したいファイルが1つ2つなら「Reveal」で間に合うでしょうが、たくさんの写真を一度に処理したいときはスクリプトが便利です。
Windowsでは「F6 Exif」のほか、「XnView」でも画像のEXIF情報を確認できます。
- F6 Exif 〜EXIF編集ソフト〜(http://www.ryouto.jp/f6exif/)
- XnView Software - Free graphic and photo viewer, converter, organizer(http://www.xnview.com/en/downloadwin32.html)
iPhone用のEXIF確認アプリとしては「Exifレンズ」があります。iPhone内のこの写真をスクリプトにかけずにアップしてよいものかどうかわからなくなったという時などに。
- 価格: 無料※記事掲載時の価格です
- デベロッパ: StudioT.jp
- 対応デバイス: 全機種
- 平均評価: 3.5 / 3件の評価
- このアプリを含むエントリー
参考にしたページ
このページで紹介されていたスクリプトを大いに参考にさせていただきました。ありがとうございます。
(こちらのスクリプトではファイル名がタイムスタンプに合わせて変更されたりします)
- Automatorを使ってExif情報を活用しながら写真をMacに取り込む 前編 - 私の使い方 - 写真 (6) - masabossa blog(http://masabossa.typepad.jp/typepad/2009/10/automatorを使ってexif情報を活用しながら写真をmacに取り込む-前編-私の使い方-写真-6.html)
- Automatorを使ってExif情報を活用しながら写真をMacに取り込む 後編 - 私の使い方 - 写真 (7) - masabossa blog(http://masabossa.typepad.jp/typepad/2009/10/automatorを使ってexif情報を活用しながら写真をmacに取り込む-後編-私の使い方-写真-7.html)
以下はExifToolの一般的な説明。
- exiftoolを使って写真の情報を管理 - Muibrog(d:id:toshi123:20100729:p1)
シェルスクリプトの処理については以下が「まさにこれだ」でした。
- 【FreeBSD】シェルスクリプトでパス文字列からファイル名/ディレクトリ名/拡張子を抽出する(http://www.kishiro.com/FreeBSD/get_filename_in_shellscript.html)
シェルスクリプトをアプリケーションにする方法
上で作ったAutomatorアプリケーションをもうちょっとちゃんと作りたいときにいいのかも。参考として。
- シェルスクリプトを Mac OS X 方式の .app にする方法 [簡単 2 ステップ] - うむらうす(http://umu.hustle.ne.jp/blog/archives/001288.html)
このほかのMac用EXIF編集ソフト
検索していて見つけたもの。メモとして。
- ExifDateChange - CWS Download Page
- http://homepage.mac.com/howdyedo/cws/software/index.html…デジカメの時計が合っていないまま撮影した写真の撮影時刻情報を訂正するのに便利。もともとEXIFが入っていない画像ファイルへの情報付加、GPS情報の削除にはともに非対応。複数ファイルの一括処理は可能。
- ExifWriter
- http://homepage2.nifty.com/ryuhei/Japanese/ExifWriter.html…Snow Leopardでは起動せず。
- AddDateExif
- http://mortimer.hp.infoseek.co.jp/iweb/index.html…サイト消滅。infoseekめー。
Macで「サービス」に組み込む話
- Exif情報を削除するサービスメニューにする - ザリガニが見ていた...。(d:id:zariganitosh:20100203:1265164816)
追記
そもそもiPhoneでの撮影時にEXIFをつけるかどうかを選べるとよい、という話を書きました。
- iPhoneのカメラで位置情報をつけて撮影するかどうかをアプリで使い分ける(d:id:Imamura:20120601:snapseed)