Cursor cursor = getContentResolver().query(photoUri, null, null, null,null);
String photoPath="";
if (cursor != null && cursor.moveToFirst()) {
photoPath = cursor.getString(cursor.getColumnIndexOrThrow
(MediaStore.Images.Media.DATA));
L.i("图片地址:"+photoPath);
}
if(!"".equals(photoPath)){
// 获取图片旋转的角度
int pictureDegree= BitmapUtils.readPictureDegree(photoPath);
L.i("图片旋转角度:"+pictureDegree);
mUploadMessageForAndroid5.onReceiveValue(new Uri[]{getUri(photoUri, pictureDegree)});
}
private Uri getUri(Uri uri, int degree) {
Bitmap photoBmp = null;
if (uri != null) {
try {
photoBmp = getBitmapFormUri(this, uri);
} catch (IOException e) {
e.printStackTrace();
}
}
photoBmp = BitmapUtils.rotateBitmapByDegree(photoBmp, degree);
uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), photoBmp, null,
null));
return uri;
}
/**
* 读取图片属性:旋转的角度
*
* @param path 图片绝对路径
* @return degree旋转的角度
*/
public static int readPictureDegree(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 e) {
e.printStackTrace();
}
return degree;
}
/**
* 将图片按照某个角度进行旋转
*
* @param bm 需要旋转的图片
* @param degree 旋转角度
* @return 旋转后的图片
*/
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;
}