zoukankan      html  css  js  c++  java
  • 三星手机拍照旋转问题

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

    调用方:

    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();
            }
        }
  • 相关阅读:
    24. Swap Nodes in Pairs
    23. Merge k Sorted Lists
    shell脚本报错:"[: =: unary operator expected"
    一种用 数组元素 指定 所调函数 的方法
    阻塞 非阻塞
    Linux open() 一个函数,两个函数原型
    QT 执行windows cmd 命令并读取结果
    Qt5 escape spaces in path
    获取磁盘的 总容量,空余容量,已用容量 【windows】
    通过进程名称,获取其路径
  • 原文地址:https://www.cnblogs.com/SA226343/p/7210999.html
Copyright © 2011-2022 走看看