背景
功能迭代中,小米10相機拍攝的圖片,BitmapFactory決議的寬高與實際相反,一頓Google后,定位原因是拍攝的照片和視頻被旋轉了90度,通過ExifInterface可以解決(能夠拿到方向),在此簡單記錄下
ExifInterface
ExifInterface是一個用于讀寫JPEG檔案或原始影像檔案中的Exif標簽的類,支持的檔案格式 JPEG, DNG, CR2, NEF, NRW, ARW, RW2, ORF, PEF, SRW, RAF and HEIF
Tips: 官方建議使用AndroidX版本,支持更多元資料的獲取,比如如GPS、Date
dependencies {
// 沒有特殊需求,直接使用Android自帶media庫中的也可以
implementation "androidx.exifinterface:exifinterface:1.3.1"
}
Exif 是什么?
Exif是一種影像檔案格式,它的資料存盤與JPEG格式是完全相同的,實際上Exif格式就是在JPEG格式頭部插入了數碼照片的資訊,包括拍攝時的光圈、快門、白平衡、ISO、焦距、日期時間等各種和拍攝條件以及相機品牌、型號、色彩編碼、拍攝時錄制的聲音以及GPS全球定位系統資料、縮略圖等,你可以利用任何可以查看JPEG檔案的看圖軟體瀏覽Exif格式的照片,但并不是所有的圖形程式都能處理Exif資訊
方法介紹、代碼示例
1、 方法介紹
首先看下ExifInterface構造方法(見下圖),支持File、filename、FileDescriptor、InputStream,這樣基本就全乎了,

當ExifInterface 創建后,可以通過ExifInterface中的方法+靜態變數獲取對應值,具體用那個方法,參考每個靜態變數上的Type,部分截圖如下


2、 代碼示例
val exifInterface = ExifInterface(filepath)
val rotation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)
val width = exifInterface.getAttributeInt(ExifInterface.TAG_IMAGE_WIDTH, 0)
val height = exifInterface.getAttributeInt(ExifInterface.TAG_IMAGE_LENGTH, 0)
if (rotation == ExifInterface.ORIENTATION_ROTATE_90 || rotation == ExifInterface.ORIENTATION_ROTATE_270) {
// 圖片被旋轉90或者270,使用時候將width、height換下
}else {
// 寬高對應
}
參考
https://developer.android.com/reference/android/media/ExifInterface
https://developer.android.google.cn/jetpack/androidx/releases/exifinterface?hl=zh-cn
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/224284.html
標籤:其他
