2017-10-27 4 views
0

Reposted from Superuserこれはある程度の(基本的な)プログラミングを伴う可能性があるので、別のユーザーの提案にしてください。コマンドラインから写真のメタデータを「ぼかす」?

写真をソーシャルメディアに投稿するときに、個人識別可能なデータを削除するために画像の一部をぼかしたいことがよくあります。これは任意の数の画像操作ツールで簡単です。私が画像のメタデータとほぼ同等のことをしたいとします。たとえば、撮影した日時をランダムに歪ませたいので、誰かが撮影日時の大まかなアイデアを得ることができ、GPSの座標をランダムに歪ませることができます。それらを最寄の0.25マイルにします。私は、カメラのタイプなど他のデータを削除したいかもしれません。それは正確である必要はなく、ちょうど誰が私がいつどこにいたかを知っていることについて嫌な気分にならない程度にメタデータを匿名化するだけです。 EXIFToolを使ってこれを行うのは簡単ですが、メタデータの読み込み、スキューング、そして書き換えはやや面倒です。ホイールを再発明したくないのですが、これを行う簡単な方法はありますか?助けてくれてありがとう。

答えて

0

これはexiftoolで行うことができますが、内側の動作とPerlの知識は少しあります。一例として、

、私は10分のスパン(+/- 5分)によってランダムに時間を「ぼかし」でしょう(OK、技術的には9分59秒だ、それが0に土地のチャンスがあります):
exiftool -d %s "-DateTimeOriginal<${DateTimeOriginal;$_+=(int(rand(600))-300)}" <FileOrDir>

内訳:
-d %s - にコピーされるのタグからコピーされたタグとしておそらく同じ - これは、UNIX時間に1970:01:01 00:00:00
-DateTimeOriginal<からの秒数を日付形式を変更します。 Less than sign <は、タグコピー操作を示します。
${DateTimeOriginal;$_+=(int(rand(600))-300)} - exiftoolsアドバンストフォーマット機能(別名Perlコード)を使用していくつかの変更を加えてコピーしているタグ。 -dオプションのため、このDateTimeOriginalタグ値はUNIXの時刻形式です。次に、0と599の間の乱数が生成されます。int(rand(600))、それを分割するために300を引いて、半分以上が負で残りが正(または0)になるようにします。既定の変数$_を使用して、生成された番号+=に追加します。

GPSLatitudeGPSLongitudeをぼかすには、度/分/秒ではなく小数点座標を使用します。また、10分の1の度数でも数マイルになる可能性があります。この場合、コマンドの重要な部分は、
"-GPSLatitude<${GPSLatitude#;$_+=(rand()-.5)/10}"
に似ています。ここでは、ハーフタグ#GPSLatitudeと小数点座標値を与えるように使用しました。もう1つのオプションは、-cオプションを使用することでした。私はまた、変化のレベルについて100番目の小数点に持ってきました。これはおそらくマイルまたは数十マイルの範囲内にあると思います。赤道と子午線の近くでは、これは正しく半球を考慮に入れていないので、これはひどく壊れます。

すべて一緒にそれを置くために:
exiftool -d %s "-DateTimeOriginal<${DateTimeOriginal;$_+=(int(rand(600))-300)}" "-GPSLatitude<${GPSLatitude#;$_+=(rand()-.5)/10}" "-GPSLongitude<${GPSLongitude#;$_+=(rand()-.5)/10}" <FileOrDir>

このコマンドは、バックアップファイルを作成します。バックアップファイルの作成を抑制するには、-overwrite_originalを追加します。サブディレクトリに再帰するために-rを追加します。このコマンドがUnix/Macで実行されている場合、bashの解釈を避けるために二重引用符または一重引用符を取り消してください。

+0

非常に詳細で有益な回答をいただきありがとうございます。ほんとうにありがとう。これは私が必要とするものを正確に行うはずです。 – ludinom

関連する問題