androidでは、一般的にexifを取得する場合はexifInterfaceを使って取得
することができますが、setAttirubteでlatitudeやlongitudeを追加しようと
してもnullになっていたり追加できても他のexifが消し飛んでたりと
信用がいまいちできない(不具合は今のところないですけどね)
ライブラリなのですが、代用品として
Sanselanというライブラリが良さそうだったので使い方だけ残しておきます。
このSanselanライブラリは、年期こそそこそこあるライブラリなのですが、
exifとして取ってこれるデータが多いことと他のexif情報を壊さずに
追加できるなど、exifInterfaceにはない良さも含んでいるので、
もしこちらの良さが際立つなら乗り換えようかなと考えながら
サンプルを辿って作ってみました。
まず、公式hpからgradleタグの中にある文をそのままコピーして
gradleのlibs内に格納します。
</pre> implementation group: 'org.apache.sanselan', name: 'sanselan', version: '0.97-incubator' <pre>
syncでエラーがでなければそのまま使うことができるので、とりあえず
空メソッドを作って中にSanselanの処理を以下のように書いていきます。
※今回はexifの取得だけを目的に書きました。
</pre> public void sanselanMethod(){ <p class="prettyprint prettyprinted"><span class="typ">JpegImageMetadata</span><span class="pln"> jpegMetadata </span><span class="pun">=</span> <span class="pun">(</span><span class="typ">JpegImageMetadata</span><span class="pun">)</span><span class="pln"> sanselanmetadata</span><span class="pun">;</span></p> <p class="prettyprint prettyprinted"><span class="typ">TiffImageMetadata</span><span class="pln"> tiffImageMetadata </span><span class="pun">=</span><span class="pln"> jpegMetadata</span><span class="pun">.</span><span class="pln">getExif</span><span class="pun">();</span></p> <p class="prettyprint prettyprinted"><span class="pln">getExif</span><span class="pun">(</span><span class="pln">tiffImageMetadata</span><span class="pun">);</span></p> } private static void getExif(TiffImageMetadata tiffImageMetadata) throws ImageReadException { for(Object field : tiffImageMetadata.getAllFields()) { if(field instanceof TiffField) { TiffField tiffField = (TiffField)field; System.out.println(tiffField.getTagName()+ ": " + tiffField.getValueDescription()); } } } <pre>
ログを見るとexif情報がドバっと出てくるので後は使いたいexif情報を
取り出します。
こちらからexifの情報を入れたい時は以下のように追加します。
</pre> TiffOutputSet exifSet = null; <p class="embcode">exifSet =new TiffOutputSet();</p> exifSet .setGPSInDegrees(lon, lat);
基本的な使い方は以上です。exifInterfaceを使っていた人は慣れない
かもしれません。使用感に関してはシンプルで判りやすいライブラリで
誰でも導入できそうで便利だなと思いますが、まだexifInterfaceとの差を
感じられずもう少し使ってみないと良さが分からないというのが今回の感想です。
※古いのにしっかり使えてすげーっていうのが第一の感想。