Python3.6.5+Pillow5.1.0+piexif1.0.13でのEXIF内GPS位置情報削除について

 はてなダイアリーというよりもはてなフォトライフの変な(はてなな?)仕様により公開していた写真データ中の位置情報がダダ漏れになっていた点についてタイトルの方法にて対応を行いました。
 このサイトへの移行ついでに支障があると独断と偏見で判断した2000+中114ファイルだけ位置情報データのみの削除を行いました。その他のカメラデータや撮影時刻・条件などはオリジナルのまま残しています。100以上の対象ファイルをGUI手動で変更するのは面倒すぎるので簡単なスクリプトを見つけてきて使用しました。
 元にしたのはstackoverflowという英文サイトに掲載されたRemoving GPS data using from an image using Pillow and Piexif(https://stackoverflow.com/questions/38483074/removing-gps-data-using-from-an-image-using-pillow-and-piexif
)
というほぼそのままの記事と一緒に投稿されたプログラムです。ただ、目的が異なるためこの問題点再現プログラムをそのまま使うにはいくつか課題があります。

一つ目はGPSデータが削除できているかを確認していません(.clear後に.getを再度実行)。

二つ目はEXIFの処理後にimg.saveでjpegデータを書き戻すと画像データの再圧縮処理が行われ画像データ本体が元と一致しないばかりか劣化します。

 一つ目の問題はpiexifのドキュメントを読みながら適当に作れば比較的簡単なので省略します。私はこのチェックに加えて再度問題ファイル抽出用の緯度経度計算スクリプトを掛けてダブルチェック後に再公開しました。

 二つ目の問題が少し悩みまして(データ移行が遅くなってすみません)、例によって寄り道していました。jpeg再圧縮時のパラメータをいじってquality=98, optimize=Trueぐらいで見た目はほぼ同じにできましたけどファイル容量がかなり増えてしまいました。そこから新規格のWebPやらJPEG2000やらも試してみましたが全くだめ(容量が増える、非対応ブラウザが多すぎる、処理が重いなどなど)でした。
# img.save(output_filename, 'JPEG’, quality=98, optimize=True, exif=exif_copy_nogps)
# img.save(output_dir+"/"+file_base+"_nogps.webp", 'WebP’, lossless=True, quality=100, exif=exif_copy_nogps)
# img.save(output_dir+"/"+file_base+"_nogps.webp", 'WebP’, quality=100, exif=exif_copy_nogps)
# img.save(output_dir+"/"+file_base+"_nogps.j2p", 'JPEG2000’) shutil.copyfile(file, output_filename)
piexif.remove(output_filename)
piexif.insert(exif_copy_nogps, output_filename)
 結局最後の2行で解決しました。出力先ファイルをshutil.copyfileでコピーしておき一旦exif情報を削除してそれからGPSデータを消したexifを書き込みます。やり直しが嫌だったので上書きができるかどうかまでは試していません。
 スクリプト全部を晒すことも考えましたけど、フォトライフの二の舞いになる(削除したつもりができていなかった)では困る可能性もあるため要点のメモだけ公開します。
 基本は位置情報が残ったら困る場所では撮影前にカメラや携帯の測位情報付加機能を無効にしておくべきだと思います。が、後処理でもなんとかならんこともなかったというお話です。