web-dev-qa-db-ja.com

Androidでexifデータを画像に書き込む方法は?

Exifインターフェースを使用してAndroidアプリケーションでキャプチャされた画像にUser_CommentTAG_GPSを書き込もうとしていますが、何らかの理由でタグが表示されませんギャラリーで画像の詳細を表示すると、画像に追加されます。

ファイルパスが間違っている可能性があるため、キャプチャされた画像にタグが書き込まれていない可能性があります。タグを間違った画像パスに書き込んだことが原因である可能性があります。

私が画像にタグを書き込む方法に問題があるかどうか誰かが知っていますか?

これは、以下の@Charlieの変更に続いてexifデータを保存するコードです。

private File getOutputPhotoFile() throws IOException {
          File directory = new File(Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_PICTURES), getPackageName());
          if (!directory.exists()) {
            if (!directory.mkdirs()) {
              Log.e(TAG, "Failed to create storage directory.");
              return null;
            }
          }


          String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.ENGLISH).format(new Date());

          File[] files = directory.listFiles();

          File exifVar =  new File(directory.getPath(), "IMG_" + timeStamp + ".jpg");
          if(files.length!=0) {
              File newestFile = files[files.length-1];
              exifVar =  new File(directory.getPath() + File.separator + newestFile.getName());
          }

          String mString = "Generic Text..";     
          ExifInterface exif = new ExifInterface(exifVar.getAbsolutePath());
          exif.setAttribute("UserComment", mString);
          exif.saveAttributes();


          exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE,
            String.valueOf(latituteField.toString()));

          exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, 
            String.valueOf(longitudeField.toString()));

          exif.saveAttributes();

          return exifVar; 




    }
11
Brian J

最初にここにあるexifファイルをコピーする必要があります google exif 次に、次のコードを使用します。

    ExifInterface exif = new ExifInterface();
    exif.readExif(exifVar.getAbsolutePath());
    exif.setTagValue(ExifInterface.TAG_USER_COMMENT, mString);
    exif.forceRewriteExif(exifVar.getAbsolutePath())); 

ここで使用されているExifInterfaceは、追加したばかりの新しいものです。

4
user51465478484

exifVar.toString()を使用しています。これは、画像へのパスではなく、ファイル名のみを返します。アプリはおそらく写真のあるフォルダーにないため、exifVar.getAbsolutePath()を使用する必要があります。

プログラムの実行と同時に写真を撮っていない場合、パスは正しくありません。代わりに次のコードを使用してください。

File[] files = directory.listFiles();

if(files.length==0) {
    // No images available
    return;
}

File newestFile = files[files.length-1];

File exifVar =  new File(directory.getPath() + File.separator + newestFile.getName());

オフトピック:

あなたの巨大な輸入リストによると:

import Android.content.*;

輸入

Android.content.Context,
Android.content.DialogInterface and
Android.content.Intent

これにより、コードがかなり短くなります。ただ言って

2
Charlie