首页 > 解决方案 > 当我使用 Camera2Api 拍照时,Android 图像被旋转

问题描述

有谁知道主流手机的各种旋转角度。每次我拍照时,它总是在不同的移动设备上以不同的角度旋转它。

标签: javaandroid

解决方案


大多数手机相机都是横向的,这意味着如果您以纵向拍摄照片,生成的照片将旋转 90 度。在这种情况下,相机软件应使用查看照片的方向填充 Exif 数据。虽然这不是 100% 可靠,因为它取决于填充退出数据的相机软件

ExifInterface ei = new ExifInterface(photoPath);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                                     ExifInterface.ORIENTATION_UNDEFINED);

Bitmap rotatedBitmap = null;
switch(orientation) {

    case ExifInterface.ORIENTATION_ROTATE_90:
        rotatedBitmap = rotateImage(bitmap, 90);
        break;

    case ExifInterface.ORIENTATION_ROTATE_180:
        rotatedBitmap = rotateImage(bitmap, 180);
        break;

    case ExifInterface.ORIENTATION_ROTATE_270:
        rotatedBitmap = rotateImage(bitmap, 270);
        break;

    case ExifInterface.ORIENTATION_NORMAL:
    default:
        rotatedBitmap = bitmap;
}

旋转图像的方法

public static Bitmap rotateImage(Bitmap source, float angle) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
                               matrix, true);
}

推荐阅读