ExifInterface 多媒体文件附加信息
简介
ExifInterface类主要描述多媒体文件比如JPG格式图片的一些附加信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统GPS、缩略图等信息。简单地说,Exif=JPEG+拍摄参数。所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。文件头中有一系列“0xFF??”格式的字符串,称为“标识”,用来 标记JPEG文件的信息段。“0xFFD8”表示图像信息开始,“0xFFD9”表示图像信息结束,这两个标识后面没有信息,而其它标识紧跟一些信息字 符。0xFFE0 -- 0xFFEF之间的标识符称为“应用标记”,没有被常规JPEG文件利用,Exif正是利用这些信息串记录拍摄信息的。按照Exif2.1标准对这些标识符的定义,数码相机可以把各种拍摄信息记入数码图像中,应用软件可以读取这些数据,再按照Exif2.1标 准,检索出它们的具体含义。一般而言包括以下一些信息:
- Image Description 图像描述、来源。指生成图像的工具
- Artist 作者 有些相机可以输入使用者的名字
- Make 生产者 指产品生产厂家
- Model 型号 指设备型号
- Orientation 方向 有的相机支持,有的不支持
- XResolution/YResolution X/Y方向分辨率
- ResolutionUnit 分辨率单位 一般为PPI
- Software 软件 显示固件Firmware版本
- DateTime 日期和时间
- YCbCrPositioning 色相定位
- ExifOffsetExif 信息位置,定义Exif在信息在文件中的写入,有些软件不显示
- ExposureTime 曝光时间 即快门速度
- FNumber 光圈系数
- ExposureProgram 曝光程序 指程序式自动曝光的设置,各相机不同,可能是Sutter Priority、Aperture Priority等等
- ISO speed ratings 感光度
- ExifVersion Exif版本
- DateTimeOriginal 创建时间
- DateTimeDigitized 数字化时间
- ComponentsConfiguration 图像构造,多指色彩组合方案
- CompressedBitsPerPixel(BPP) 压缩时每像素色彩位 指压缩程度
- ExposureBiasValue 曝光补偿
- MaxApertureValue 最大光圈
- MeteringMode 测光方式, 平均式测光、中央重点测光、点测光等
- Lightsource光 源 指白平衡设置
- Flash 是否使用闪光灯
- FocalLength 焦距,一般显示镜头物理焦距,有些软件可以定义一个系数,从而显示相当于35mm相机的焦距MakerNote(User Comment) 作者标记、说明、记录
- FlashPixVersion FlashPix版本,个别机型支持
- ColorSpace 色域、色彩空间
- ExifImageWidth(Pixel X Dimension) 图像宽度,指横向像素数
- ExifImageLength(Pixel Y Dimension) 图像高度,指纵向像素数
- Interoperability IFD 通用性扩展项定义指针和TIFF文件相关,具体含义不详
- FileSource 源文件 Compression压缩比
在Android Camera程序开发过程中,要用到Exif相关的知识,如果处理不当,会导致拍摄的JPEG图片无法正常浏览。在Froyo(Android 2.2)源码中的Camera应用是不对Exif信息进行写操作,而只是读操作,对于Exif的写操作是交给Camera硬件抽象层去完成,这是 google的设计逻辑。但是不同的Android平台及其相关子平台,再加上不同的Camera应用,相互交替,排列组合,或许会出现这样一种情况:底 层没有去写Exif,而上层应用也没有写Exif信息,那么图片的显示信息将会丢失。其中影响最为严重的是Orientation这个参数。
案例
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView textView = new TextView(this);textView.setText("获取到的信息");ExifInterface exif = null;try {exif = new ExifInterface(Environment.getExternalStorageDirectory().getPath() + "/pic.jpg");} catch (IOException e) {e.printStackTrace();}if (null == exif) {textView.append("\n" + "神马都没有");} else {textView.append(getPicInformation(exif));}setContentView(textView);}public static String getPicInformation(ExifInterface exif) {StringBuilder sBuilder = new StringBuilder();sBuilder.append("\n光圈:" + exif.getAttribute(ExifInterface.TAG_APERTURE));//2.0sBuilder.append("\n拍摄日期:" + exif.getAttribute(ExifInterface.TAG_DATETIME));//2016:05:15 21:34:21sBuilder.append("\n曝光时间:" + exif.getAttribute(ExifInterface.TAG_EXPOSURE_TIME));// 0.030sBuilder.append("\n是否有闪光灯:" + exif.getAttribute(ExifInterface.TAG_FLASH));// 0sBuilder.append("\n焦距: " + exif.getAttribute(ExifInterface.TAG_FOCAL_LENGTH));//4620/1000sBuilder.append("\n海拔: " + exif.getAttribute(ExifInterface.TAG_GPS_ALTITUDE));//0/100sBuilder.append("\n海拔参数:" + exif.getAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF));// 1sBuilder.append("\n时间戳:" + exif.getAttribute(ExifInterface.TAG_GPS_DATESTAMP));// 2016:05:15sBuilder.append("\n维度: " + exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE));//23/1,5/1,45224761/1000000sBuilder.append("\n南半球还是北半球:" + exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF));// NsBuilder.append("\n经度: " + exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE));//113/1,19/1,23122558/1000000sBuilder.append("\n东区还是西区:" + exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF));// EsBuilder.append("\n高: " + exif.getAttribute(ExifInterface.TAG_IMAGE_LENGTH));//5152sBuilder.append("\n宽: " + exif.getAttribute(ExifInterface.TAG_IMAGE_WIDTH));//3888sBuilder.append("\n感光度: " + exif.getAttribute(ExifInterface.TAG_ISO));//200sBuilder.append("\n生产厂家:" + exif.getAttribute(ExifInterface.TAG_MAKE));// HUAWEIsBuilder.append("\n设备型号: " + exif.getAttribute(ExifInterface.TAG_MODEL));//PLK-AL10sBuilder.append("\n旋转角度: " + exif.getAttribute(ExifInterface.TAG_ORIENTATION));//1sBuilder.append("\n白平衡:" + exif.getAttribute(ExifInterface.TAG_WHITE_BALANCE));// 0sBuilder.append("\n旋转角度为:" + readPictureDegree(Environment.getExternalStorageDirectory().getPath() + "/pic.jpg") + "°");return sBuilder.toString();}/**获取图片的旋转角度 */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;default:degree = 0;}} catch (IOException e) {e.printStackTrace();}return degree;}}
ExifInterface 多媒体文件附加信息的更多相关文章
- Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示
注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...
- DataTables学习:从最基本的入门静态页面,使用ajax调用Json本地数据源实现前端开发深入学习,根据后台数据接口替换掉本地的json本地数据,以及报错的处理地方,8个例子(显示行附加信息,回调使用api,动态显示和隐藏列...),详细教程
一.DataTables 个人觉得学习一门新的插件或者技术时候,官方文档是最根本的,入门最快的地方,但是有时候看完官方文档,一步步的动手写例子,总会出现各种莫名其妙的错误,需要我们很好的进行研究出错 ...
- [SoapUI] 重载JSONComparator比对JSON Response,忽略小数点后几位,将科学计数法转换为普通数字进行比对,在错误信息中打印当前循环的case number及其他附加信息
重载JSONComparator比对JSON Response,忽略小数点后几位,将科学计数法转换为普通数字进行比对,在错误信息中打印当前循环的case number及其他附加信息 package d ...
- dedecms部分文章出现读取附加信息出错的解决办法
问题: 估计是新版本开发的时候,没有考虑旧版,文章内容为空的新闻,新版不在允许文章内容为空的新闻,这样旧版的内容为空的新闻升级后将无法再编辑. 解决:你可以对如下文件进行如下修改:article_ed ...
- VC问题 IntelliSense:“没有可用的附加信息”,[请參见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]
在XP上安装VS2010 后发现 IntelliSense不能使用,但在Windows7上是能够正常使用这功能的.关于IntelliSense不能使用的问题已有网友提出了是由于KB2876217这个补 ...
- [HTML表格]在databases显示行的附加信息
模板代码: <!-- DataTables CSS --> <link rel="stylesheet" href="{% static 'DataTa ...
- VC问题 IntelliSense:“没有可用的附加信息”,[请参见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]
当出现以上的问题时,若按照网上所说的解决方法: 1.安装VA(Visual_AssistX) 2.安装Microsoft SQL Server Compact 3.5 3.更改设置“工具-选项-文本编 ...
- 使用onfocus与onblur实现搜索框附加信息
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 四、HTML属性—— HTML 元素提供的附加信息
HTML属性 (1)属性一般描述于开始标签 (2)属性总是以名称/值对的形式出现,比如:name="value" (3)使用小写属性 HTML属性值 应该始终被包括在引号内. —— ...
随机推荐
- 小学生之解析XML应用
1.什么是XML? 解析:XML:Extensible Markup Language(可扩展标记语言) HTML:HyperLink Text Markup Language(超文本标记语言) ...
- 武汉科技大学ACM :1008: A+B for Input-Output Practice (VIII)
Problem Description Your task is to calculate the sum of some integers. Input Input contains an inte ...
- C++拾遗(十)类与动态内存分配(2)
静态成员函数 声明时包含关键字static.注意以下两点: 1.使用静态成员函数时不能通过对象或者this指针来调用,只能使用类名+作用域解析符来调用. 2.静态成员函数只能使用静态成员. new操作 ...
- jquery的节点查询
jQuery.parent(expr) //找父元素 jQuery.parents(expr) //找到所有祖先元素,不限于父元素 jQuery.children ...
- 认识cocos2d-x jsbinding
近年来HTML5风起云涌,特别在移动端已经被更多的人熟识.H5跨平台,在线更新等特性,被人们津津乐道.然后就出现了各种H5的框架,甚至多达100种,真是让开发者眼花缭乱,笔者作为一个从事H5游戏开发一 ...
- smarty 练习: 分页查询
对查出的数据进行分页,并添加查询 在main.php和main.html两个页面操作: 后台:main.php <?php include("../init.inc.php" ...
- WDCP控制面板安装卸载
安装 安装源码 WDCP提供两种安装模式,一种是源码安装,一种是RPM包安装,众所周知,源码安装虽然安装时要比RPM包安装繁琐,但是使用上要节省内存.所以我这里主要介绍源码安装. 首先是下载安装源代码 ...
- 【结构型】Decorate模式
装饰模式主要意图是为对象扩展额外的职责,但对于用户来说,在使用行为上并没有任何的变化.在此举一个例子来解释该模式的含义.假如你手上有一张照片,此时可以给它盖上一片玻璃片,同时再套上一个精美的相框.如此 ...
- noi 04:网线主管
04:网线主管 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 仙境的居民们决定举办一场程序设计区域赛.裁判委员会完全由自愿组成,他们承诺要组织一次史上最公正 ...
- ora-01445 无法从不带保留关键字的表的联接视图中选择 ROWID 或采样
ora-01445无法从不带保留关键字的表的联接视图中选择 ROWID 或采样 从网上找了很多资料,许多都是没结贴的,说什么的都有,排查了一下sql 发现各个段的left join都没有错误. 有一个 ...
