1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

exifinterfaceを使った画像回転処理の実装

Last updated at Posted at 2022-02-18

#初めに
以前、画像のUriからByteArrayに変換する処理を投稿させていただきましたが、それを利用して今度は画像が編集によって回転されている場合、逆方向に回転をさせてしっかりと縦画面表示になる様に実装していきたいと思います

#導入方法

implementation("androidx.exifinterface:exifinterface:1.3.3")

###実装例

val imageStream: InputStream? = contentResolver.openInputStream(imageUri)

            val bitmap = BitmapFactory.decodeStream(imageStream)
            val byteArrayOutputStream = ByteArrayOutputStream()
            val compressFormat = when (mimeType) {
                MediaType.Jpeg -> {
                    Bitmap.CompressFormat.JPEG
                }
                MediaType.Png -> {
                    Bitmap.CompressFormat.PNG
                }
                else -> {
                    throw IllegalStateException("media type not found")
                }
            }
            // ここで回転されてる角度を取得する
            val orientation = ExifInterface(
                contentResolver.openInputStream(imageUri)
                    ?: throw ImageDecodeException("stream can not open")
            ).getAttributeInt(
                ExifInterface.TAG_ORIENTATION,
                ExifInterface.ORIENTATION_NORMAL
            )

            // ここで回転されてる角度によって回転し直す角度を決めて変換メソッドを呼び出す
            val rotatedBitmap = when (orientation) {
                ExifInterface.ORIENTATION_ROTATE_90 -> rotateImage(bitmap = bitmap, angle = (90F))
                ExifInterface.ORIENTATION_ROTATE_180 -> rotateImage(bitmap = bitmap, angle = (180F))
                ExifInterface.ORIENTATION_ROTATE_270 -> rotateImage(bitmap = bitmap, angle = (270F))
                else -> bitmap
            }

            rotatedBitmap.compress(compressFormat, 100, byteArrayOutputStream)
            byteArrayOutputStream.toByteArray()
    /**
     * 回転した Bitmap を返す
     */
    private fun rotateImage(bitmap: Bitmap, angle: Float): Bitmap {
        return Bitmap.createBitmap(
            bitmap,
            0,
            0,
            bitmap.width,
            bitmap.height,
            Matrix().apply { setRotate(degree) },
            true
        )
    }

###最後に
以前の投稿でも書いた部分を書くかは悩みましたが、備忘録的な扱いが多いためわかりやすい様にコード全体を書きました。
何かの役に立てれば幸いです

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?