问题描述
我有一个具有图像上传功能的应用程序,在 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 (将#修改为@)