KonifarPod

Androidで画像ファイルのExifデータを取り除く方法

   

Pocket

Androidで写真送信時に少しでも画像サイズを小さくするためにExifデータを除去してみました。Android限定ではなくJavaの話でもありますが、手順を残しておきます。

1.sanselan-0.97-incubator.jarをインポート

Exifデータを扱うならAndroid標準のExifInterfaceでもできるらしいのですが、調べてみると何やら挙動が怪しいみたいなのでsanselan-0.97-incubator.jarを利用することにしました。この中の、org.apache.sanselan.formats.jpeg.exifRewrite.ExifRewriterというクラスで、Exifデータの操作を行えます。

こちらからダウンロードして、プロジェクトのlibsディレクトリの中に放り込みます。

 

2.実装

写真送信時、OutputStreamに変換するところでExifデータを除去するように実装します。

import org.apache.sanselan.formats.jpeg.exifRewrite.ExifRewriter;

・・・(略)・・・

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(mFile));

    try {
        // これだけでOK
        new ExifRewriter().removeExifMetadata(bis, bos);
    } catch (Exception e) {
        // 何か起こったら、Exifを除去しないロジックを通るようにする
        byte[] buff = new byte[512];
        while (bis.read(buff) > 0) {
            bos.write(buff);
        }
    }

 

送信時のバイトサイズを確認してみると確かにExif分減っていることが確認できました。

正直そこまで劇的に容量が減りはしなかったのです。Webサービスなんかだとやる必要ないかも。ただ、3G回線など細いネットワークの場合こういう細かい改善が効いてくると信じているのであります。

Pocket

 - Develop