Преобразование URI в растровое изображение поворачивает изображение

У меня есть приложение с функцией загрузки изображений, и после загрузки изображения на onActivityResult() Я получаю Uri изображения и превращаю его в растровое изображение с помощью следующей функции:

          private fun uriToBitmap(selectedFileUri: Uri): Bitmap? {
        return try {
            val parcelFileDescriptor: ParcelFileDescriptor =
                requireContext().contentResolver.openFileDescriptor(selectedFileUri, "r")!!
            val fileDescriptor: FileDescriptor = parcelFileDescriptor.fileDescriptor
            val image = BitmapFactory.decodeFileDescriptor(fileDescriptor)
            parcelFileDescriptor.close()
            image
        } catch (e: IOException) {
            e.printStackTrace()
            null
        }
    }

но по какой-то причине мое изображение поворачивается на 90 градусов, если это было портретное изображение

Я пробовал использовать ExifInterface вещь для ее исправления и поворота с помощью этой функции:

      fun determineImageRotation(imageFile: File, bitmap: Bitmap): Bitmap {
    val exif = ExifInterface(imageFile.absolutePath)
    val orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 0)
    val matrix = Matrix()
    when (orientation) {
        6 -> matrix.postRotate(90f)
        3 -> matrix.postRotate(180f)
        8 -> matrix.postRotate(270f)
    }
    return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
}

но я получаю эту ошибку:

      ExifInterface got an unsupported image format file(ExifInterface supports JPEG and some RAW image formats only) or a corrupted JPEG file to ExifInterface.
    java.io.EOFException

вот как я создаю путь к файлу для изображения:

          @Throws(IOException::class)
    private fun createImageFile(): File {
        // Create an image file name
        val timeStamp: String =
            SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
        val storageDir = requireContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES)
        return File.createTempFile(
            "PNG_${timeStamp}_", /* prefix */
            ".png", /* suffix */
            storageDir /* directory */
        )
    }

вот пример пути к файлу, который у меня есть для изображения:

      /storage/emulated/0/Android/data/avedot.app/files/Pictures/PNG_20210622_094219_232594250744276112.png

Я предполагаю, что в пути есть что-то, связанное с точкой в avedot.app Whice нарушает функцию ExifInterface, но как я могу обойти это?

Заранее спасибо !

0 ответов

Другие вопросы по тегам