ImageMagick を使って Exif を取り除く方法

公開日: : 最終更新日:2014/01/26 ImageMagick ,

プライベートで撮影した写真をブログとかどこかの Web サービスにアップロードしたり、人に渡すときはプライバシー保護のため Exif を削除しておきたいですよね、ということで ImageMagick を使って削除する方法を調べてみました。

icatch-lock-6311261312401

Exif を削除するコマンド

ImageMagick の convert コマンドには “-strip” オプションがあり、これを指定すると Exif を削除することができます。

ImageMagick のサイトにある “-strip” オプションのページ には簡潔ですが、次のようにあります。

strip the image of any profiles or comments.

実行するコマンドは次のようになります。

$ convert in_file -strip out_file
  • in_file → Exif を削除したい画像ファイル
  • out_file → Exif を削除した画像ファイル

Exif を削除するとファイルサイズが小さくなる

Exif を削除すると撮影場所の緯度経度や撮影機器などの情報が削除されるので、うっかり自宅の場所がばれるといったことがなくなってひと安心です。面倒なことに巻き込まれないためにも Exif は必ず削除しておきたいところです。

で、Exif を削除するとファイルサイズも小さくなるという嬉しい効果もあります。
サーバの空き容量を節約するためにも位置情報が不要な場合は Exif は削除しておきましょう。

Java で Exif を削除する

仕事でですが、ユーザが写真をアップロードしていつでも閲覧できるサービスを作りまして、そのときに Java から Exif を削除するってことをやりました。
特に目新しいことは何もやっていないのですが、次のように実装しました。

  1. サーバに ImageMagick をインストールする
  2. Java から ProcessBuilder を使って ImageMagick の convert コマンドを実行する

ソースコードはこんな感じです。

/**
 * Exif を削除する。
 * 
 * @param commandPath
 *            convert コマンドの絶対パス。
 * @param src
 *            生成元のファイル。Exif を削除したい画像ファイル
 * @param dest
 *            生成先のファイル。このファイルに画像を作成する
 * @throws IOException
 *             commandPath に指定されているパスが convert コマンドではなかった場合
 * @throws InterruptedException
 *             ImageMagick の操作に失敗した場合
 */
public static void removeExif(String commandPath, File src, File dest) throws IOException, InterruptedException {
    if (log.isDebugEnabled()) {
        log.debug(String.format("commandPath:%s, srcPath:%s, destPath:%s",
            commandPath, src, dest));
    }

    ProcessBuilder builder = new ProcessBuilder(
            commandPath,
            src.getAbsolutePath(),
            "-strip",
            dest.getAbsolutePath());
    Process process = builder.start();
    process.waitFor();
}

第一引数の commandPath は ImageMagick の convert コマンドのパスを指定します。パスはプロパティファイルなどに切り出しておきました。

ライブラリ作りました

その案件では Exif を削除する以外にも ImageMagick を使ってサムネイルを作成したり画像を結合したりとしました。

で、このままじゃもったいないのでライブラリを作成してみました。

README にいろいろ書いてあるので、もしよければ使ってみていただけると嬉しいです。

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

icatch-puzzle-212154_640

ImageMagick を使って画像を結合する方法

前回に引き続き ImageMagick ネタです。今回は画像を結合する方法を調べてみました。

記事を読む

icatch-man-thumbs-up

ImageMagick を使ってサムネイル画像を作成する方法

またまた ImageMagick ネタです。今回はサムネイル画像を作成する方法を調べてみました。

記事を読む

no image

ImageMagick を使って画像の縦横サイズを縮小する

ガラケーを使った案件で、100KB制限のために画像ファイルを縮小する必要があった。ImageMagi

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


一 × = 8

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑