微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Uri 到位图转换旋转图像

如何解决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,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 中的点相关的内容,这会破坏 ExifInterface 函数,但我该如何解决这个问题?

提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。