在Android系统中有时候会遇到调用系统相机拍照的需求,然而拍照之后,经常性的会遇到一个问题就是,照片自己旋转了一定的角度,拿我刚遇到的三星手机来说吧,照片自动向左旋转了90度,这个就很令人惆怅啊,因为这个之前有过一定的了解,所以解决起来也相对容易一些,总的思路就是,先获取照片转了多少度,然后。。。给它旋转回来。。。时间所限,先把核心的代码贴出来吧:
/**
* 读取图片旋转了的角度--EricTang
*
* @param path图片保存路径
* @return degree图片旋转了的角度
*/
public static int readImageDegree(String path) {
int degree = 0;
try {
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 ex) {
Log.d("读取图片旋转了的角度时发生严重问题", "----" + ex.getMessage());
ex.printStackTrace();
}
return degree;
}
/**
* 调整图片角度--EricTang
*
* @param angle要调整的图片角度
* @param bitmap传递过来的bitmap参数,即需要旋转的bitmap
* @return 返回的bitmap参数
*/
public static Bitmap rotateBitmap(int angle, Bitmap bitmap) {
//旋转图片
Matrix matrix = new Matrix();
matrix.postRotate(angle);
Log.d("向右旋转的角度是", "--" + angle);
//创建新图片
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
return resizedBitmap;
}
至于ExifInterface这个类,位于Android.Media下,用于获取图片的Exif信息,想要了解更多的同学可以看一下,至于该方法如何使用,相信会使用Bitmap的同学都会使用了,如果不会的话。。。那就直接在下面留言吧
2015年1月28日,EricTang 记