剛剛想起來前幾天面試的時(shí)候遇到的一個(gè)問題硼啤,
問題大概是這樣的做拍照上傳圖片功能的時(shí)候议经,在三星手機(jī)上拍出的照片是旋轉(zhuǎn)了90度的,應(yīng)該如何解決這個(gè)問題谴返。因?yàn)橹皼]有遇到過這種問題煞肾,當(dāng)時(shí)我回答的是給圖片做一個(gè)ObjectAnimator的rotation動(dòng)畫。結(jié)果這個(gè)是錯(cuò)誤的嗓袱。 在這里做一個(gè)記錄吧籍救,防止遇到這樣的問題。
造成這個(gè)問題的原因是三星堆Android相機(jī)單獨(dú)做了優(yōu)化渠抹。
要解決這個(gè)問題我們需要根據(jù)圖片的路徑讀取照片EXIF(Exchangeable Image File 可交換圖像文件)信息中的旋轉(zhuǎn)角度蝙昙。
通過下面的代碼可以拿到手機(jī)拍照的圖片的旋轉(zhuǎn)角度闪萄,三星的是90度,而其他的手機(jī)旋轉(zhuǎn)角度為0奇颠。
/
* 讀取照片exif信息中的旋轉(zhuǎn)角度
* @param path 照片路徑
* @return角度
*/
public static int readPictureDegree(String path) {
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
拿到圖片的旋轉(zhuǎn)角度就好解決了败去,根據(jù)被旋轉(zhuǎn)了的角度旋轉(zhuǎn)回來就好了。 代碼如下烈拒。
public static Bitmap toturn(Bitmap img){
Matrix matrix = new Matrix();
matrix.postRotate(+90); /翻轉(zhuǎn)90度/
int width = img.getWidth();
int height =img.getHeight();
img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);
return img;
}
再說一下Android調(diào)用三星相機(jī)崩潰的問題为迈。
原因是因?yàn)槿鞘謾C(jī)在拍照的時(shí)候會(huì)做橫豎屏切換,對(duì)Activity的生命周期造成了影響缺菌。解決問題很簡(jiǎn)單在拍照所在的Activity的AndroidManifest.xml文件中配置
<activity
android:name="com.ldm.test.PhotoActivity"
android:configChanges="orientation|keyboardHidden" />
使得橫豎屏切換時(shí)不會(huì)重新調(diào)用各個(gè)生命周期方法葫辐。只會(huì)執(zhí)行onConfigurationChanged方法。
解決方法來自于網(wǎng)絡(luò)伴郁,如有侵權(quán)聯(lián)系本人刪除耿战。