[Android] 가져온 이미지 회전 막기

2022. 10. 22. 02:40·Android
⚠️ 2021.01.14에 작성된 글입니다 ⚠️

 

 

문제상황

[Android] 이미지 가져오기 - 카메라, 갤러리 이용에서 이미지를 가져올 때 카메라, 갤러리 상관 없이 랜덤하게 이미지가 회전하는 상황 발생

회전을 원래대로 하기 위해 여러 예제를 찾아봤지만

1. ExifInterface를 사용해 회전값을 구하고,

2. 회전된 값에 따라 원래대로 회전한 비트맵을 만들어

3. 그 새로운 비트맵을 이미지뷰에 세팅하는

복잡하고 작동이 안 되는 방법밖에 없었음

예시1) 안드로이드 카메라 예제 (3/3) - 촬영된 이미지 원래대로 회전시키기

예시2) imageView 사진 회전 현상 해결하기 & 사진의 절대경로명 찾기(JAVA)

 

- MainActivity.java

Bitmap rotateImage(Bitmap source) throws IOException {
	ExifInterface exif = new ExifInterface(imagePath);
	int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
	Matrix matrix = new Matrix();
    switch (rotation) {
		case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
			matrix.setScale(-1, 1);
			break;
		case ExifInterface.ORIENTATION_FLIP_VERTICAL:
			matrix.setRotate(180);
			matrix.postScale(-1, 1);
			break;
		case ExifInterface.ORIENTATION_ROTATE_180:
			matrix.setRotate(180);
			break;
		case ExifInterface.ORIENTATION_ROTATE_270:
			matrix.setRotate(-90);
			break;
		case ExifInterface.ORIENTATION_ROTATE_90:
			matrix.setRotate(90);
			break;
		case ExifInterface.ORIENTATION_TRANSPOSE:
			matrix.setRotate(90);
			matrix.postScale(-1, 1);
			break;
		case ExifInterface.ORIENTATION_TRANSVERSE:
			matrix.setRotate(-90);
			matrix.postScale(-1, 1);
			break;
		case ExifInterface.ORIENTATION_NORMAL:
			default:
			return source;
	}
	return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
}

 

 

 


해결

검색 중 이미지 라이브러리인 Glide를 활용해 이미지 경로를 이미지뷰에 띄우는 방법 찾음

Glide는 자동회전을 지원하는 것으로 예상

2022.10.22 - [Android] - [Android] Glide 사용하기

 

 

- MainActivitiy.java

Glide를 사용해 수정한 코드

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) { // 결과가 있을 경우
            if (requestCode == GALLERY) { // 갤러리를 선택했을 경우
//				1) data의 주소 사용하는 방법
                imagePath = data.getDataString(); // "content://media/external/images/media/7215"
//				2) 절대경로 사용하는 방법
                Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null);
                if (cursor != null) {
                    cursor.moveToFirst();
                    int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                    imagePath = cursor.getString(index); // "/media/external/images/media/7215"
                    cursor.close();
                }
            }
            Glide.with(this)
                    .load(imagePath)
                    .into(imageView);
        }
    }

 

 

 

 

 

 


참고자료

Android) ImageView 사진이 자동으로 회전될 때 해결법 - Glide 라이브러리 사용하기 (tistory.com)

 

 

 

공부하며 정리한 글입니다. 내용에 대한 피드백은 언제나 환영입니다.

728x90
저작자표시 비영리 변경금지 (새창열림)

'Android' 카테고리의 다른 글

[Android] Glide 사용하기  (0) 2022.10.22
[Android] 이미지 받아 다른 액티비티에 전달하기  (0) 2022.10.22
[Android] 이미지 가져오기 - 카메라, 갤러리 이용  (0) 2022.10.22
[Android] 디데이 계산기  (0) 2022.10.22
[Android] WebView 웹뷰  (0) 2022.10.22
'Android' 카테고리의 다른 글
  • [Android] Glide 사용하기
  • [Android] 이미지 받아 다른 액티비티에 전달하기
  • [Android] 이미지 가져오기 - 카메라, 갤러리 이용
  • [Android] 디데이 계산기
Wintinue
Wintinue
201 Created!
  • Wintinue
    Win Record
    Wintinue
    • 📘 Post (68)
      • Android (32)
      • Nest.js (1)
      • NGINX (1)
      • Error (10)
      • AWS (1)
      • Git (3)
      • IT용어 (4)
      • CMD (2)
      • Language (5)
        • PHP (3)
        • Java (2)
      • Project (5)
        • 개인 프로젝트 (3)
        • 팀 프로젝트 (2)
  • 링크

    • Github
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Wintinue
[Android] 가져온 이미지 회전 막기
상단으로

티스토리툴바