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

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

作者: CokaZhang | 来源:发表于2017-04-21 22:17 被阅读0次

    刚刚想起来前几天面试的时候遇到的一个问题,
    问题大概是这样的做拍照上传图片功能的时候,在三星手机上拍出的照片是旋转了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方法。

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/tqsjzttx.html