解决Android 拍照图片被旋转问题
生活随笔
收集整理的這篇文章主要介紹了
解决Android 拍照图片被旋转问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天在項(xiàng)目中做拍照上傳頭像相關(guān), 但調(diào)用系統(tǒng)相機(jī)拍照得到的圖片總是旋轉(zhuǎn)90度, 在網(wǎng)上找到了兩種答案:
- 第一種如下, 無(wú)奈得到的旋轉(zhuǎn)角度總是 0 度 , 無(wú)法解決旋轉(zhuǎn)問(wèn)題
- 第二種如下 , 通過(guò)比較圖片寬高來(lái)旋轉(zhuǎn)圖片 , 可惜雖然豎著牌的照片能正常顯示, 可一旦將相機(jī)橫向拍攝, 展示到界面就多旋轉(zhuǎn)了 90 度 , 故方法二無(wú)效
萬(wàn)般無(wú)奈之下, 我無(wú)意之間使用方法一中的 ExifInterface 打印了拍照后壓縮前角度信息, toast 打印結(jié)果是 6 , 對(duì)應(yīng)常量 ExifInterface.ORIENTATION_ROTATE_90 , 可我記得之前獲取到的旋轉(zhuǎn)角度是0 , 仔細(xì)一想發(fā)現(xiàn)獲取角度為0那次操作的是壓縮后的圖片, 我懷疑是不是壓縮將圖片旋轉(zhuǎn)信息抹掉了.
于是我在壓縮前獲取圖片旋轉(zhuǎn)信息:
ExifInterface exifInterface = new ExifInterface(finalUserIcon.getAbsolutePath());//finalUserIcon為壓縮前圖片 final int degree = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); UIUtil.debugToast(String.valueOf(degree));壓縮后將原圖旋轉(zhuǎn)信息保存替換現(xiàn)有旋轉(zhuǎn)信息:
try {ExifInterface endEI = new ExifInterface(imgPath);//imgPath為壓縮后圖片路徑endEI.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(degree));endEI.saveAttributes(); } catch (IOException e) {e.printStackTrace(); }然后采用方法一的方式獲取旋轉(zhuǎn)信息并糾正旋轉(zhuǎn)角度:
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();}}至此問(wèn)題得到解決, 無(wú)論橫著拍照還是豎著拍照都能正確展示.
總結(jié)
以上是生活随笔為你收集整理的解决Android 拍照图片被旋转问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C# 小程序 getPhoneNumbe
- 下一篇: Android 拍照 图片 颠倒90