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();
            }
        }
  • 相关阅读:
    Nginx中工作进程(work-process)为多少合适?
    Ubuntu中安装启动Nginx
    怎么获得类加载器?
    XML解析方式有哪些?
    HashMap常见面试题
    IO流分类
    集合之间的区别
    css布局2
    css布局1
    css3 总结01
  • 原文地址:https://www.cnblogs.com/SA226343/p/7210999.html
Copyright © 2011-2022 走看看