본문 바로가기
android

가져온 이미지 회전 막기

by 윈 Win 2021. 1. 14.
728x90

블로그 이사했습니다!

 

👇 블로그 이전 공지 👇

블로그 이전 안내 (tistory.com)

 

 

👇 새 블로그에서 글 보기 👇

[Android] 가져온 이미지 회전 막기 — Win Record (tistory.com)

 

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

⚠️ 2021.01.14에 작성된 글입니다 ⚠️ 문제상황 [Android] 이미지 가져오기 - 카메라, 갤러리 이용에서 이미지를 가져올 때 카메라, 갤러리 상관 없이 랜덤하게 이미지가 회전하는 상황 발생 회전

win-record.tistory.com

 

 


 

문제상황

이전 글에서 이미지를 가져올 때 카메라, 갤러리 상관 없이 랜덤하게 이미지가 회전하는 상황 발생

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

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는 자동회전을 지원하는 것으로 예상

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);
        }
    }

 

 

 


이전 글

이미지 가져오기 -카메라, 갤러리 이용 (tistory.com)

다음 글

이미지 받아 다른 액티비티에 전달하기 (tistory.com)

 


참고자료

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

 

 

 

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

댓글