728x90
블로그 이사했습니다!
👇 블로그 이전 공지 👇
👇 새 블로그에서 글 보기 👇
[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는 자동회전을 지원하는 것으로 예상
- 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)
공부하며 정리한 글입니다. 내용에 대한 피드백은 언제나 환영입니다.
'android' 카테고리의 다른 글
Firbase 사진 업로드하기 (0) | 2021.01.14 |
---|---|
이미지 받아 다른 액티비티에 전달하기 (0) | 2021.01.14 |
Glide 사용하기 (0) | 2021.01.14 |
이미지 가져오기 - 카메라, 갤러리 이용 (1) | 2021.01.14 |
Firebase와 안드로이드 프로젝트 연결하기 (0) | 2021.01.11 |
댓글