使用ExifInterface类来更改EXIF数据中的方向信息。将以下代码添加到拍照代码的末尾即可。
// 获取拍摄的图像文件
File photoFile = new File(photoPath);
// 读取图像文件的EXIF数据
ExifInterface exif = new ExifInterface(photoPath);
// 从EXIF数据中获取方向标志
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
// 将方向标志转换为角度
int angle = 0;
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
angle = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
angle = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
angle = 270;
break;
}
// 如果存在方向信息,则旋转图像并更新EXIF数据
if (angle != 0) {
// 旋转图像
Matrix matrix = new Matrix();
matrix.postRotate(angle);
Bitmap bitmap = BitmapFactory.decodeFile(photoPath);
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
FileOutputStream outputStream = new FileOutputStream(photoFile);
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.close();
// 更新EXIF数据
exif.setAttribute(ExifInterface.TAG_ORIENTATION,
Integer.toString(ExifInterface.ORIENTATION_NORMAL));
exif.saveAttributes();
}