解决Android 拍照图片被旋转问题
生活随笔
收集整理的這篇文章主要介紹了
解决Android 拍照图片被旋转问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天在項目中做拍照上傳頭像相關, 但調用系統相機拍照得到的圖片總是旋轉90度, 在網上找到了兩種答案:
- 第一種如下, 無奈得到的旋轉角度總是 0 度 , 無法解決旋轉問題
- 第二種如下 , 通過比較圖片寬高來旋轉圖片 , 可惜雖然豎著牌的照片能正常顯示, 可一旦將相機橫向拍攝, 展示到界面就多旋轉了 90 度 , 故方法二無效
萬般無奈之下, 我無意之間使用方法一中的 ExifInterface 打印了拍照后壓縮前角度信息, toast 打印結果是 6 , 對應常量 ExifInterface.ORIENTATION_ROTATE_90 , 可我記得之前獲取到的旋轉角度是0 , 仔細一想發現獲取角度為0那次操作的是壓縮后的圖片, 我懷疑是不是壓縮將圖片旋轉信息抹掉了.
于是我在壓縮前獲取圖片旋轉信息:
ExifInterface exifInterface = new ExifInterface(finalUserIcon.getAbsolutePath());//finalUserIcon為壓縮前圖片 final int degree = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); UIUtil.debugToast(String.valueOf(degree));壓縮后將原圖旋轉信息保存替換現有旋轉信息:
try {ExifInterface endEI = new ExifInterface(imgPath);//imgPath為壓縮后圖片路徑endEI.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(degree));endEI.saveAttributes(); } catch (IOException e) {e.printStackTrace(); }然后采用方法一的方式獲取旋轉信息并糾正旋轉角度:
int degree = readPictureDegree(imgPath);Bitmap bitmap = rotateBitmap(degree, BitmapFactory.decodeFile(imgPath));saveBitmap(imgPath);/** 保存方法 */public static void saveBitmap(String path, Bitmap bm) {File f = new File(path);if (f.exists()) {f.delete();}try {FileOutputStream out = new FileOutputStream(f);bm.compress(Bitmap.CompressFormat.PNG, 90, out);out.flush();out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}至此問題得到解決, 無論橫著拍照還是豎著拍照都能正確展示.
總結
以上是生活随笔為你收集整理的解决Android 拍照图片被旋转问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 小程序 getPhoneNumbe
- 下一篇: QtCreator中Kits选项变灰,有