100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > android 三星手机拍照旋转90度 解决三星拍照上传照片被旋转90度 和三星相机崩溃...

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

时间:2020-11-25 05:14:13

相关推荐

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

刚刚想起来前几天面试的时候遇到的一个问题,

问题大概是这样的做拍照上传图片功能的时候,在三星手机上拍出的照片是旋转了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文件中配置

android:name="com.ldm.test.PhotoActivity"

android:configChanges="orientation|keyboardHidden" />

使得横竖屏切换时不会重新调用各个生命周期方法。只会执行onConfigurationChanged方法。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。