android三星等手机拍照自动旋转问题与解决
来源:互联网 发布:英语基础自学软件 编辑:程序博客网 时间:2024/04/28 05:34
开发"上传图片或头像"的过程中,发现有时三星,索尼等手机在拍照后会自动旋转90度。现在解决方案如下:
分为两步(第0步不一定用得上,主要看1与2):
0.onActivityResult中的代码进行改进 1.根据路径读取图片的旋转的角度 2.按照这个角度来旋转。
0.
将onActivityResult中的代码进行改进:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Uri originalUri = null; File file = null; if (null != data && data.getData() != null) { originalUri = data.getData(); file = getFileFromMediaUri(ac, originalUri); } Bitmap photoBmp = getBitmapFormUri(ac, Uri.fromFile(file)); int degree = getBitmapDegree(file.getAbsolutePath()); // 把图片旋转为正的方向 Bitmap newbitmap = rotateBitmapByDegree(photoBmp, degree);
}
//用到的方法如下:public static File getFileFromMediaUri(Context ac, Uri uri) { if(uri.getScheme().toString().compareTo("content") == 0){ ContentResolver cr = ac.getContentResolver(); Cursor cursor = cr.query(uri, null, null, null, null);// 根据Uri从数据库中找 if (cursor != null) { cursor.moveToFirst(); String filePath = cursor.getString(cursor.getColumnIndex("_data"));// 获取图片路径 cursor.close(); if (filePath != null) { return new File(filePath); } } }else if(uri.getScheme().toString().compareTo("file") == 0){ return new File(uri.toString().replace("file://","")); } return null;}
1.
/**
* 读取图片的旋转的角度
* @param path 图片绝对路径
* @return 图片的旋转角度
*/
public static 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;
}
2./**
* 将图片按照某个角度进行旋转
* @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;
}
2 0
- android三星等手机拍照自动旋转问题与解决
- 真正解决三星等手机拍照问题
- 三星手机拍照旋转问题
- Android三星手机拍照自动旋转问题解决方案
- 三星手机拍照,图片旋转问题的解决
- 解决三星手机拍照旋转导致崩溃的问题
- Android 三星手机拍照,从图库选择照片旋转问题完美解决
- (转)Android 三星手机拍照,从图库选择照片旋转问题完美解决
- Android 三星手机拍照,从图库选择照片旋转问题完美解决
- Android解决三星手机拍照图片调用时逆时针旋转90度问题
- Android解决三星手机图片旋转问题
- android 三星手机拍照裁剪后会旋转问题
- 解决三星手机拍照后,图片旋转。
- Android 三星手机拍照图片旋转处理
- android解决三星手机拍照获取图片的问题
- 三星拍照旋转问题
- Android 自定义前置相机(三星手机拍照时照片旋转90度问题)
- 三星手机拍照强制切换到横屏及照片旋转问题
- easyUI 设置datagrid的行高 + 文字超宽换行
- 成功的境界
- 深入浅出MFC:Windows程序的生与死
- UVa 11181 Probability|Given
- 欢迎使用CSDN-markdown编辑器
- android三星等手机拍照自动旋转问题与解决
- java中final关键字的作用
- goLang 操作windows注册表
- 剑指offer--面试题6: 重建二叉树(树)
- 理解OAuth2.0
- iOS UITableView
- LeapMotion开发(五)-- Hand模块下的所有Methods用法和说明(下篇)(C++SDK)
- [JSOI2008]星球大战starwar
- PIL 中的 Image 模块