安卓实用知识

解决部分安卓手机上拍出的照片被自动旋转的问题

2016-12-08  本文已影响1041人  Ggx的代码之旅

通常情况,调用照相机拍照之后产生的图片默认旋转角度为0,此信息可以通过读取图片的EXIF信息来获取到。对于某些手机拍照之后旋转角度被改变了,造成照片的现实也改变了我们可以通过android.graphics.Matrix将照片角度在旋转回去即可。

1. 使用ExifInterface对象获取图片的EXIF信息。

/**
 * 读取图片的旋转的角度
 * ExifInterface支持3中传参数的方式,
 * 1.指定文件路径
 * 2.通过FileDescriptor对象
 * 3.从原始的输入流
 * @param path 图片绝对路径
 * @return
 */
private 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 Bitmap rotateBitmapByDegree(Bitmap bm, int degree) {
    Bitmap returnBm = null;
  
    // 根据旋转角度,生成旋转矩阵
    Matrix matrix = new Matrix();
    matrix.postRotate(degree);
    try {
        // 将原始图片按照旋转矩阵进行旋转,并得到新的图片
        returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
    } catch (OutOfMemoryError e) {
    }
    if (returnBm == null) {
        returnBm = bm;
    }
    if (bm != returnBm) {
        bm.recycle();
    }
    return returnBm;
}
上一篇下一篇

猜你喜欢

热点阅读