2017-07-08 18 views
0

写真を撮る意図を使って、後でサーバーにアップロードします。 画像は、最初にそのようにSDカードに保存されます。exifデータが欠落している画像ファイル

/** 
* Creating file uri to store image/video 
*/ 
public Uri getOutputMediaFileUri(int type) { 
    return Uri.fromFile(getOutputMediaFile(type)); 
} 

/** 
* returning image/video 
*/ 
private static File getOutputMediaFile(int type) { 

    // External sdcard location 
    File mediaStorageDir = new File(
      Environment 
        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
      Config.IMAGE_DIRECTORY_NAME); 

    // Create the storage directory if it does not exist 
    if (!mediaStorageDir.exists()) { 
     if (!mediaStorageDir.mkdirs()) { 
      Log.d(TAG, "Oops! Failed create " 
        + Config.IMAGE_DIRECTORY_NAME + " directory"); 
      return null; 
     } 
    } 

    // Create a media file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
      Locale.getDefault()).format(new Date()); 
    File mediaFile; 
    if (type == MEDIA_TYPE_IMAGE) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator 
       + "IMG_" + timeStamp + ".jpg"); 
    } else if (type == MEDIA_TYPE_VIDEO) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator 
       + "VID_" + timeStamp + ".mp4"); 
    } else { 
     return null; 
    } 

    return mediaFile; 
} 

保存された画像にはEXIFデータを持っていません。それはuriに起因するのでしょうか? (デフォルトのカメラアプリで撮影した写真はexifデータを持っているので、アプリで問題になっているはずです)。

編集:保存された

/** 
* Launching camera app to capture image 
*/ 
private void captureImage() { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

    // start the image capture Intent 
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
} 

URL:コードは、デフォルトのカメラアプリを起動するために使用

/** 
* Here we store the file url as it will be null after returning from camera 
* app 
*/ 
@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    // save file url in bundle as it will be null on screen orientation 
    // changes 
    outState.putParcelable("file_uri", fileUri); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 

    // get the file url 
    fileUri = savedInstanceState.getParcelable("file_uri"); 
} 

出典:デフォルトのカメラアプリで撮影したhttp://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/

+1

「保存された画像にはexifデータがありません」 - これはどのように決定しましたか? – CommonsWare

+0

私はWindows PCにimgをコピーし、次に "詳細"の下を見ます。デフォルトのアプリで撮影した写真で同じことをすると、exifデータが表示されます。 編集:imgをサーバーにアップロードし、デスクトップにダウンロードして「詳細」の下に表示すると、exifデータは表示されません。 – Spagett

+1

写真の撮影方法を示すために質問を更新できますか? – CommonsWare

答えて

1

写真のEXIFデータを持っていますだから私のアプリで問題にする必要があります

必ずしもそうではありません。あなたが示したコードから、その特定のカメラアプリのバグであるように見えます。すべてのカメラアプリのデベロッパーがACTION_IMAGE_CAPTUREをよくテストするわけではありません。画像を撮影した後でEXIFテストを実行する前に画像を修正している場合を除き、カメラアプリはACTION_IMAGE_CAPTUREで撮影した画像にEXIFタグを追加していません。 These things happen

ACTION_IMAGE_CAPTUREでカメラアプリをインストールし、その動作を確認することができます。例えばOpen CameraACTION_IMAGE_CAPTUREをサポートしていますが、ACTION_IMAGE_CAPTUREで開始したときのEXIF動作をテストしていません。

+0

あなたはそうです。 Open Cameraでテストし、exifデータは保存されています。ありがとう! – Spagett

関連する問題