Android 笔记 exif信息 uri信息
来源:互联网 发布:昆明网络主播招聘 编辑:程序博客网 时间:2024/06/11 05:22
exif信息
在解析并显示图像的时候,会需要orientation数据,来得到图片的旋转角度,如果显示的时候不设置角度,那么有orientation信息的图片就方向不对。
orientation在exif信息中,exif是保存在图片中的一系列拍摄信息
有可能不同厂家在里面保存的信息多少有点区别,但是有些公用的信息都有,比如光圈,快门,拍摄模式,白平衡,或者还有一些版权信息等等。
手机保存的jpeg文件里面也有exif信息,从中可以读取orientation信息
但是有一点要注意,就是可能是为了节省空间,orientation数据很短,并不是直接保存的角度。
对应关系如下:(度数都是顺时针旋转)
解释一下。
本来图像的像素点是方形排列,0th row和0th column表示第一行和第一列像素
以上表格对应的位置说明的是这第一行和第一列像素在图像中的位置
所以,如果分别在 右/上, 就表示图像顺时针旋转了90度,其他的以此类推。
所以获得的orientation信息是 1-8,在设置图像旋转的时候需要设置成对应的角度。
1 —–0度
6 ——90度
3 ——180度
8 ——270度
其他的有翻转的还没有研究过 matrix.postRotate(degree,pivotX,pivotY)
三个参数是角度,旋转中心点X,旋转中心点Y
解析uri
如果要获得exif信息,android里面有一个类需要用到 ExifInterface
,名字里面有一个interface,实际上是个class,大概是设计者当时喝多了吧。
exif = new ExifInterface(FileSystemManager.uriToPath(this,uri));int oriInfo = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,0);switch (oriInfo) { case 6: orientation = 90; break; case 3: orientation = 180; break; case 8: orientation = 270; break; default: orientation = 0; }
这个构造方法的参数是一个path,大部分时候需要用uri来解析出来。
在api24的时候添加了两个新的构造方法,参数分别是inputStream和FileDescriptor
如果支持老API版本,就只能用path参数的构造方法
那么怎么用uri解析出path呢
uri构成
content://com.example.project:200/folder/subfolder/etc
———/ —————————– /—/ ————————–/
scheme —— host ————– port ——— path
—- - /———————————–/
————– authority
如上描述的这样,标识了uri的每个部分。
通常如果直接标识file的话,scheme就是file:
,
如果标识的是android的content的话,scheme就是content:
如果是file,那么直接通过uri.getPath()
就可以获得路径了
如果是content,那么就表示这个资源是存储在中央数据库里面的,那么path就表示在数据库的位置,从这里是不能读取文件的,所以需要以下办法。实际上跟读取ContentResolver是一样的
public static String uriToPath(Context context,Uri uri) { if(uri==null) return null; String scheme = uri.getScheme(); if(scheme==null||scheme.equals(ContentResolver.SCHEME_FILE)) return uri.getPath(); if(scheme.equals(ContentResolver.SCHEME_CONTENT)) { Cursor cursor = context.getContentResolver().query( uri, new String[]{MediaStore.Images.Media.DATA}, null, null, null ); if(cursor!=null&&cursor.moveToFirst()) { return cursor.getString(cursor.getColumnIndex( MediaStore.Images.Media.DATA )); } } return null; }
有了path就可以读取exif了
然后就可以愉快的设置orientation了(实际上就是用Matrix旋转以下图像而已)
- Android 笔记 exif信息 uri信息
- Android获取Exif信息
- Android--操作图片Exif信息
- Android--操作图片Exif信息
- Android:操作图片Exif信息
- Android--操作图片Exif信息
- Android:操作图片Exif信息
- Android 编辑图片EXIF信息
- Android--操作图片Exif信息
- Android读取图片当中的信息exif
- Android修改图片的Exif信息
- 读取数码照片Exif信息
- python 取Exif信息
- 修改图片exif信息
- JPEG: Exif信息相关
- 获取照片Exif信息
- JPG图片EXIF信息提取工具exif
- android 拍照的照片方向问题,读取图片EXIF信息
- recyclerview分割线 -总结
- 谷歌市场项目代码详解(二)
- classpath变量的配置
- 初次使用gradle(一)
- Linux下的c基础编程——冒泡排序法
- Android 笔记 exif信息 uri信息
- 安卓中以“同步”的方式获取网络访问结果
- 某加固使用xposed脱壳
- ANDROID内存优化(大汇总——中)
- 算法学习:并行化初体验_JAVA实现并行化归并算法
- 设计模式学习笔记之策略模式
- 通过HttpURLConnection和HttpClient访问网络
- 熟悉Markedown的语法
- javac 不是内部或外部命令 和 错误 找不到或无法加载主类 的解决方法