• 三星手机拍照旋转问题


    获得拍照照片后,查看旋转角度,如果有旋转角度,说明被旋转了,再使用旋转矩阵旋转回来即可。

    调用方:

    int degree = BitmapUtils.getBitmapDegree(file.getAbsolutePath());
    BitmapUtils.compressBitmapForUploadLimitMaxSize(this, file, MAX_UPLOAD_SIZE);
    BitmapUtils.rotateBitmapByDegree(file, degree);
    public static int getBitmapDegree(String path) {
            int degree = 0;
            try {
                // 从指定路径下读取图片,并获取其EXIF信息
                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 void rotateBitmapByDegree(File file, int degree) {
            if (file == null || !file.exists() || degree == 0) {
                return;
            }
            Bitmap bitmap = null, rotatedBitmap = null;
            try {
                bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
                if (bitmap == null) {
                    return;
                }
                // 根据旋转角度,生成旋转矩阵
                Matrix matrix = new Matrix();
                matrix.postRotate(degree);
                // 将原始图片按照旋转矩阵进行旋转,并得到新的图片
                rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
                saveBitmap2file(rotatedBitmap, file);
            } catch (OutOfMemoryError e) {
                L.exception(e);
            } finally {
                if (bitmap != null) {
                    bitmap.recycle();
                }
                if (rotatedBitmap != null) {
                    rotatedBitmap.recycle();
                }
                System.gc();
            }
        }
  • 相关阅读:
    匈牙利游戏
    钓鱼
    路由选择
    借教室
    有趣的数
    广告印刷
    海战
    暑假周进度报告(一)
    在Oracle创建一个自己用的用户及角色
    下载,安装oracle数据库以及navicat连接数据库
  • 原文地址:https://www.cnblogs.com/SA226343/p/7210999.html
Copyright © 2020-2023  润新知