新运营了公众号:Android面试无忧
这几天被这个相机照片方向问题弄得头大。主要问题集中在:
在某些机型上,如三星手机,会经常出现图片拍完后旋转问题。
在网上的方法
ExifInterface exifInterface = new ExifInterface(path);
int tag = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
此方法是原理,关键我的问题在于path的获取。
1)Uri uri = data.getData();获取uri
2)String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().managedQuery(uri, proj, null, null, null);
//按我个人理解 这个是获得用户选择的图片的索引值
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
//最后根据索引值获取图片路径
String path = cursor.getString(column_index);
这里拍摄的图片一定要是JPG格式,因为只有JPG图片里才包括了EXT信息,摄像头的信息,其他格式的图片可能不支持。
以上是本地选取图片,对于拍照其实道理一样,主要是前后摄像头的位置会导致图片旋转的角度不同,前置摄像头图片需要旋转270,后置摄像头图片需要旋转90。
基于以上方法可解决。
最后关于path,uri,file转化关系作一归纳:
1)uri是存在数据库里的地址,path是某文件的具体目录,file就是普通的文件。
从data.getData()获取到uri,由uri查询path, 由path取得fileFile file = new File(path);
2)File file = new File(path); Uri uri = Uri.fromFile(file); uri.getPath()获取path。