2017-02-09 5 views
3

Image (Camera으로 찍거나 Gallery에서 가져옴)의 일부 Exif 속성을 읽어야합니다. 여기Android EXIF ​​데이터 카메라 또는 갤러리의 이미지가 손실되었습니다

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File file = new File(myObject.getLocalUrl()); 
    Uri fileURI = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileURI); 
    startActivityForResult(intent, CAPTURE_IMAGE_REQUEST_CODE); 

나는 GalleryPicker 실행 방법은 다음과 같습니다 : 여기

내가 Camera 출시 어떻게 문제가

Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); 
startActivityForResult(Intent.createChooser(intent, getString(R.string.image_picker_select_image)), SELECT_IMAGE_FROM_GALLERY_REQUEST_CODE); 

을 그 예를 들어, 첫 번째 경우 (Camera)에서, Image을 가져 와서 ExternalStorage에 저장하면 Exif 정보가 손실됩니다.

Gallery에서 가져온 Images과 동일합니다. 나는 다음을 시도했습니다

ExifInterface exifInterface = null; 
    try { 
     exifInterface = new ExifInterface(myObject.getLocalUrl()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    String exifOrientation = exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION); 
    String exifMake = exifInterface.getAttribute(ExifInterface.TAG_MAKE); 
    String exifModel = exifInterface.getAttribute(ExifInterface.TAG_MODEL); 

:

  1. 테이크 나는 Exif 데이터를 읽는 방법 마침내 여기

    Uri uri = data.getData(); 
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
    

    그리고있다 : 그것은 내가 onActivityResult 방법에 Image 얻는 방법 a picture 내 장치를 사용하여 Camera (내 App을 사용하지 않고).

  2. ExifInterface을 사용하여 Exif 데이터를 읽으십시오.
  3. 그것은 매력처럼 작동합니다.

그래서 나는 문제가 생각하는 (그것이 Camera로 촬영 한 것 후) Image이 저장 또는 ImageExif 데이터가 손실됩니다의 Gallery에서 선택 될 때.

나는 Stackoverflow 여기에 적어도 20 ~ 30 게시물을 읽었습니다하지만 모두가 가지고있는 기본적 문제는 orientationexif 정보가 손실되므로 솔루션은 Exif 데이터의 오른쪽 orientation를 쓰고 있다는 점이다.

Exif 데이터를 덮어 쓰지 않으므로이 솔루션은 저에게 도움이되지 않습니다. 원래의 데이터를 읽고 싶습니다.

아이디어/힌트가 있으십니까? 감사합니다. .

+0

새 ExifInterface (myObject.getLocalUrl());'. myObject 란 무엇입니까? onActivityResult()와 무슨 상관이 있습니까? 완전한 코드를 더 잘 보여줍니다. – greenapps

+0

'OnActivityResult 메소드에서 이미지를 얻는 방법은 다음과 같습니다.'. 부적절한. 문제가되지 않는다. .jpg 파일에서 exif를 가져 오는 방법을 보여 주어야합니다. – greenapps

+0

'모든 사람이 가지고있는 문제는 방향 exif 정보가 없어져서 솔루션이 Exif 데이터에 올바른 방향을 쓰고 있다는 것입니다. 이 모든 것은 나에게 의미가 없습니다. JPG 파일은 exif 정보를 잃지 않습니다. – greenapps

답변

0

아래의 방법으로 시도 : 많은 ImageColumns 사용할 수 regrading 이미지 정보입니다 있습니다

public static int getOrientation(Context context, Uri photoUri) { 
      Cursor cursor = context.getContentResolver().query(photoUri, 
      new String[] { MediaStore.Images.ImageColumns.ORIENTATION },null, null, null); 
      try { 
       if (cursor.moveToFirst()) { 
        return cursor.getInt(0); 
       } else { 
        return -1; 
       } 
      } finally { 
       cursor.close(); 
      } 
     } 

이 방법으로 Uri를 전달합니다.

+0

나는'ExifInterface' 메서드와이 메서드를 사용해 보았습니다. 그리고 두 경우 모두 테스트 한 두 개의 전화에있는 모든 그림의 방향으로'0' 만 얻었습니다 (Moto G4 삼성 Galaxy J5) –

관련 문제