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

안드로이드 이미지 파일 직접 간섭 질문드립니다.(깍두기)

0 추천
photo = BitmapFactory.decodeFile(cropFile);
							try {
								ExifInterface exif = new ExifInterface(cropFile);
								int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION , ExifInterface.ORIENTATION_NORMAL);
								int exifDegree = BitmapUtil.exifOrientationToDegrees(exifOrientation);
								photo = BitmapUtil.rotate(photo, exifDegree);
							} catch (Exception e) {}

마지막 photo 에 저장된 비트맵은 각도가 보정되어 나옵니다. 하지만 cropfile이라는 파일 경로에 있는 파일은 회전이 보정 되지 않았습니다.

파일의 회전을 바꾸는 방법을 아시면 조언 부탁드립니다.

확실히 회전 보정된 비트맵을 파일로 바꿔 저장했지만 화질이 너무 깨져서 이 방법을 여쭈어 보는 겁니다...

 

 

witsht (350 포인트) 님이 2015년 8월 27일 질문
witsht님이 2015년 8월 27일 수정
/**

 * @param fileUri the media store file uri
 * @param orientation in degrees 0, 90, 180, 270
 * @param context
 * @return
 */
public boolean setOrientation(Uri fileUri, int orientation, Context context) {
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.ORIENTATION, orientation);
    int rowsUpdated = context.getContentResolver().update(fileUri, values, null, null);
    return rowsUpdated > 0;
}


http://stackoverflow.com/questions/19753912/set-image-orientation-using-exifinterface
찾아봐서 적용해보지 돌아가지 않습니다.

2개의 답변

0 추천
crop된 파일의 경우 Exif 정보가 삭제되어 Exif정보로 회전 보정하기는 어려울 것 같네요
libre2k (7,420 포인트) 님이 2015년 8월 28일 답변
0 추천
파일에 Exif 정보를 이용해서 방향을 정해주는 부분이내요..
이걸로 않된다면libre2k님의 말씀처럼 exif가 없거나 적용받을수 없는 상태(없는거나 같내요)인걸로 파악되 그럼 직접 파일을 회전 시키시면될듯합니다.
image rotate 함수를 이용해서 이미지를 회전시켜서 다시 저장하시는 것은 어떠실지요? 만일 회전이 90도 단위로 일어나는 회전이면 간단한 이미지 회전에서도 화질저하는 거의 없을 것으로 보이는군요.
90도 회전이 아니고 임의 각도 회전을 하신다면 그건 공부가 좀만이 필요할듯합니다.
 
photo = BitmapFactory.decodeFile(cropFile);
Matrix rotateMatrix = new Matrix();
rotateMatrix.setRotate(angle);
Bitmap rotate = Bitmap.createBitmap(photo,0,0,photo.getWidth(), photo.getHeight(), rotateMatrix, true);

angle은  float 이고 각도넣어주시면 됩니다 .

 

컴러기 (22,230 포인트) 님이 2015년 8월 28일 답변
컴러기님이 2015년 8월 28일 수정
...