解决三星拍照上传照片被旋转90度,和三星相机崩溃

2017-04-21  本文已影响0人  CokaZhang

刚刚想起来前几天面试的时候遇到的一个问题,
问题大概是这样的做拍照上传图片功能的时候,在三星手机上拍出的照片是旋转了90度的,应该如何解决这个问题。因为之前没有遇到过这种问题,当时我回答的是给图片做一个ObjectAnimator的rotation动画。结果这个是错误的。 在这里做一个记录吧,防止遇到这样的问题。

造成这个问题的原因是三星堆Android相机单独做了优化。
要解决这个问题我们需要根据图片的路径读取照片EXIF(Exchangeable Image File 可交换图像文件)信息中的旋转角度。
通过下面的代码可以拿到手机拍照的图片的旋转角度,三星的是90度,而其他的手机旋转角度为0。
/
* 读取照片exif信息中的旋转角度
* @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;
}

拿到图片的旋转角度就好解决了,根据被旋转了的角度旋转回来就好了。 代码如下。
public static Bitmap toturn(Bitmap img){
Matrix matrix = new Matrix();
matrix.postRotate(+90); /翻转90度/
int width = img.getWidth();
int height =img.getHeight();
img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);
return img;
}

再说一下Android调用三星相机崩溃的问题。
原因是因为三星手机在拍照的时候会做横竖屏切换,对Activity的生命周期造成了影响。解决问题很简单在拍照所在的Activity的AndroidManifest.xml文件中配置
<activity
android:name="com.ldm.test.PhotoActivity"
android:configChanges="orientation|keyboardHidden" />
使得横竖屏切换时不会重新调用各个生命周期方法。只会执行onConfigurationChanged方法。

解决方法来自于网络,如有侵权联系本人删除。

上一篇下一篇

猜你喜欢

热点阅读