[kotlin]カメラで撮影した画像の回転問題を解決する
カメラやライブラリテントで撮影した写真を使って、画像ビューに表示しようとすると、画像が回転する現象が発生します.
メソッドを探す過程でExifInterfaceクラスを用いてこの問題を解決した.
ExifInterface.TAG ORIENTATIONで受け取った写真の角度は関係ありませんが、画像の回転時により簡潔にするために整数を返す関数を使用しました. ExifInterface.TAG ORIENTATIONは写真の回転角度を表します. exiforientationToDegrees関数により、受信した写真の回転角度のInt値が回転関数のパラメータとして伝達され、回転する画像が受信される.
メソッドを探す過程でExifInterfaceクラスを用いてこの問題を解決した.
1.カメラテント実行部
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
getCamera.launch(intent)
2.ExifOrientation ToDegrees関数と画像回転関数を実現して写真角度を返す
//사진 각도 반환 함수
fun exifOrientationToDegrees(exifOrientation: Int): Int {
if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
return 90
} else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
return 180
} else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
return 270
}
return 0
}
// 이미지 회전 함수
private fun rotate(bitmap: Bitmap, degree: Int) : Bitmap {
val matrix = Matrix()
matrix.postRotate(degree.toFloat())
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix,true)
}
3.写真を選択して実行するregisterForActivity Result関数
//카메라 인텐트
private val getCamera = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
... 생략 ...
var bitmap = BitmapFactory.decodeFile(filePath, option)
//meta data 저장하는 Exif
val exif = filePath?.let { ExifInterface(filePath) }
val exifOrientation: Int = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)
val exifDegree = exifOrientationToDegrees(exifOrientation)
bitmap = rotate(bitmap, exifDegree)
bitmap?.let {
binding.userImageView.setImageBitmap(bitmap)
}
}
}
Reference
この問題について([kotlin]カメラで撮影した画像の回転問題を解決する), 我々は、より多くの情報をここで見つけました https://velog.io/@ywown/kotlin-카메라로-찍은-이미지-회전-현상-해결テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol