마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

사진선택을 구글포토로 했을경우... 파일 정보 읽는 법이 있을까요??

0 추천
안녕하세요, 안드로이드 초보 개발자입니다.

많은 앱에서 그렇듯 갤러리의 사진을 선택하여 보여주는 처리를 하고 있습니다.

다음과 같이 갤러리앱을 실행(선택)하도록 하고 있습니다.

intent = new Intent(Intent.ACTION_PICK);
intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);

구글 포토앱이 설치되어 있을 경우 목록에 뜨게 됩니다.

근데 구글포토앱은 클라우드 앨범입니다. 사진을 선택하였을때 넘겨주는 uri가 일반적이지 않더군요 ㅠ

기본 갤러리로 선택시 다음과 같은 uri입니다
content://media/external/images/media/45

구글포토로 선택시 아래와 같은 uri이 넘어옵니다.
content://com.google.android.apps.photos.contentprovider/0/1/mediakey%3A%2FAF1QipOcbXdHzRNvqO6wFMn3UA0Zg-mDOQYp5uFIx5H5/ORIGINAL/NONE/197561453

구글링을해서 구글포토로 받은 uri을 처리 하는 방법을 찾았습니다.
inputStream으로 받아서 Bitmap을 생성하고 그걸 파일로 만들어 갤러리앱에 넣은다음에 그렇게 만들어진 이미지를 사용하는 것이죠.  이렇게 하면 되긴합니다.

근데 문제가 한가지 있습니다. 사진 촬영시 이미지 파일 자체에 회전이 적용됩니다. 예를들어 폰을 거꾸로 들고 사진을 찍고, 다시 폰을 똑바로 세우면 찍은 사진도 돌아갑니다. 그리고 사진의 정보를 보면 회전이 270 적용되어 있다고 나오죠.

구글포토로 열어봐도 270도 회전이 된 상태로 보여집니다.

근데 inputStream으로 다운받고 생성한 파일은 회전이 0으로 되어 있습니다.

그래서... 사용자가 구글포토에서 사진을 선택할때는 똑바로 세워진(사실은 270도 회전된상태이지만) 상태인데

그걸 앱에서 보여줄때는 거꾸로 보여지는 상태가 됩니다. (0도로 적용되기 때문)

 

파일을 생성하기전에 회전값을 알아내서 회전시킨다음에 저장을 하면 구글포토에서 보여진대로 저장이 될것 같은데요.

회전값을 받아오는 방법을 모르겠습니다. ㅠ ExifInterface을 사용하려 해보았으나 구글포토에서 넘겨주는 uri로는 처리가 안됩니다.

 

혹시 이와 비슷한 문제 겪으신 경험 있으시면 조언 부탁드리겠습니다.

감사합니다. 즐거운 하루 되세요.

 

카톡, 티전화 앱으로 테스트 해보니 정상적으로 표시가 되네요.. 방법이 궁금합니다 ㅠㅠ
블랙이요블랙 (12,860 포인트) 님이 2016년 6월 21일 질문
블랙이요블랙님이 2016년 6월 21일 수정

1개의 답변

+1 추천
 
채택된 답변
파일 생성을 잘못하신 것 같아요.

"inputStream으로 받아서 Bitmap을 생성하고 그걸 파일로 만들어"

이렇게 하지 마시고 inputStream을 그대로 파일로 저장하세요.
익명사용자 님이 2016년 6월 21일 답변
블랙이요블랙님이 2016년 6월 21일 채택됨
답변 감사합니다. 말씀하신대로 해보니까 되네요!
근데 왜 되는지를 잘 모르겠습니다.
bitmap으로 바꿀때 이미지의 정보가 사라지는걸까요??
또 inputStream을 바로 파일로 만들어서 해당 파일의 Exif정보를 읽어와도 회전상태는 0이네요. 덕분에 해결은 하였지만 잘 이해가 안되네요 ㅠㅠ 더 공부해봐야겠습니다.
...