extends:http://www.2cto.com/kf/201405/303813.html  

读写均是键值对的方式,需要注意的是值的类型需要严格按照api定义格式。

支持读写节点为:

1.TAG_APERTURE:光圈

2.TAG_DATETIME:日期时间

类型:String,格式为:“yyyy-MM-dd HH:mm:ss”
3.TAG_EXPOSURE_TIME:曝光时刻

4.TAG_FLASH:是否开启闪光灯

5.TAG_FOCAL_LENGTH:焦距
6.TAG_GPS_ALTITUDE:高度

官方释义:The altitude (in meters) based on the reference in TAG_GPS_ALTITUDE_REF. Type is rational.

官方解释类型为有理数,个人理解应为double类型的正数(正整数和正分数)。

7.TAG_GPS_ALTITUDE_REF:高度参考(海平面以上还是海平面以下)

类型:int,0为海平面以上,1为海平面以下。
8.TAG_GPS_DATESTAMP:日期戳

9.TAG_GPS_LATITUDE:纬度

类型:String,格式:Format is num1/denom1,num2/denom2,num3/denom3.(即度分秒格式),android.location.Location.getLatitude()获取到的纬度信息需要转换后才能写到此节点下,转换方法在下边列出。
10. TAG_GPS_LATITUDE_REF:纬度参考(南纬、北纬)
11.TAG_GPS_LONGITUDE:经度

同纬度。
12. TAG_GPS_LONGITUDE:经度参考(东经、西经)
13.TAG_GPS_TIMESTAMP:时间戳
14.TAG_IMAGE_LENGTH:图片高度
15.TAG_IMAGE_WIDTH:图片宽度
16.TAG_ISO:曝光度
17.TAG_MAKE:设备制造商
18.TAG_MODEL:设备型号
19.TAG_ORIENTATION:方向
20.TAG_WHITE_BALANCE:白平衡

以写入与读取经纬度信息为例介绍Android ExifInterface读写jpg exif信息:

//Gps纬度
double lat = GpsTracking.bestLocation.getLatitude();
//Gps经度
double lon = GpsTracking.bestLocation.getLongitude();
try {
//获取jpg文件
ExifInterface exif = new ExifInterface(filePath + / +filename);
//写入纬度信息
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, gpsInfoConvert(lat));
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF,
lat > 0 ?N : S);
//写入经度信息
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, gpsInfoConvert(lon));
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF,
lon > 0 ?E : W);
//这句话很重要,一定要saveAttributes才能使写入的信息生效。
exif.saveAttributes();
//获取纬度信息
String latitude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
//获取经度信息
String longitude = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
} catch (IOException e) {
e.printStackTrace();
}
    /*
* TAG_DATETIME 时间日期
* TAG_FLASH 闪光灯
* TAG_GPS_LATITUDE 纬度
* TAG_GPS_LATITUDE_REF 纬度参考
* TAG_GPS_LONGITUDE 经度
* TAG_GPS_LONGITUDE_REF 经度参考
* TAG_IMAGE_LENGTH 图片长
* TAG_IMAGE_WIDTH 图片宽
* TAG_MAKE 设备制造商
* TAG_MODEL 设备型号
* TAG_ORIENTATION 方向
* TAG_WHITE_BALANCE 白平衡
*/
public static String readPicturedDate(String photoPath) {
try {
if (!TextUtils.isEmpty(photoPath)) {
ExifInterface exifInterface = new ExifInterface(photoPath);
return exifInterface.getAttribute(ExifInterface.TAG_DATETIME);
}
} catch (Exception e) {
e.printStackTrace();
}
return new Date().toString();
} public static float[] readPicturedPlace(String photoPath) {
float[] location = new float[2];
try {
if (!TextUtils.isEmpty(photoPath)) {
ExifInterface exifInterface = new ExifInterface(photoPath);
location[0] = toLatLng(exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE));
location[1] = toLatLng(exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE));
return location;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 读取图片属性:旋转的角度
*
* @param path 图片绝对路径
* @return degree旋转的角度
* 在获取Bitmap时,获得旋转的角度,再进行相应的旋转操作就可以了。
*/
public static int readPictureDegree(String path) {
int degree = 0;
try {
if (TextUtils.isEmpty(path)) return degree;
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;
} public static float toLatLng(String dfm) {
String[] dfmArr = dfm.split(","); if (dfmArr.length > 1) { float d = (toLatLngSub(dfmArr[0]));
float f = toLatLngSub(dfmArr[1]);
float m = toLatLngSub(dfmArr[2]);
f = f + (m / 60);
return (f / 60) + (d);
}
return 0;
} public static float toLatLngSub(String arg) {
String[] args = arg.split("/");
float a = Float.parseFloat(args[0]);
float b = Float.parseFloat(args[1]);
return a / b;
}

JPEG图片扩展信息读取与修改的更多相关文章

  1. JPEG图片扩展信息读取与改动

    近日项目中须要用到往jpg图片中写入信息(非水印),经调研发现Android中已经封装了读写jpg图片扩展信息的api(ExifInterface). 相应api地址:http://developer ...

  2. JPEG图像扩展信息读取和修改

    最近,项目需要使用jpg图像信息被写入(非水印),经过研究发现,Android已封装的读者jpg图片扩展信息api(ExifInterface). 通讯api住址:http://developer.a ...

  3. C# 修改PNG图片metadata信息 (含转载fancyblogs博文)

    WPF中使用 metadata-extractor可以轻松获取 PNG图片metadata信息 NuGet 获取地址: PM> Install-Package MetadataExtractor ...

  4. Android 图片Exif信息相关的获取与修改

    1 Exif是什么 Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.ISO.焦距.日期时间 ...

  5. iText操作PDF读取JPEG图片ArrayIndexOutOfBoundsException异常

    iText版本:itextpdf-5.5.1.jar 问题描述 读取本地JPEG图片文件的代码: com.itextpdf.text.Image image = com.itextpdf.text.I ...

  6. ijg库解码超大型jpeg图片

    1. ijg库解码超大型jpeg图片(>100M)的时候,如何避免内存溢出. 采用边解码边压缩的策略,每次解码一行或者若干行图片数据,然后对于这些解码的数据,进行DQT(量化处理,过滤掉高频的数 ...

  7. MP3 信息读取

    MP3 信息读取 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0: 编者:乌龙哈里 2017-03-13 参考: MP3-wikipedia ID3v1 MPE ...

  8. Android--操作图片Exif信息

    前言 在Android系统中,图片文件在内存中以像素点的二维数组加载,存放像素信息,还会在开头加上一些额外的照片拍摄参数信息,这些信息就是Exif.Android2.0之后,媒体库加入了操作图片Exi ...

  9. Universal App图片文件和图片byte[]信息转换为bitmap

    1. 打开图片文件并转换为BitmapImage类 首先要做的自然是打开一个图片文件了,可以使用FileOpenPicker来手动选择图片,总之能拿到一个StorageFile都行. //打开图片选择 ...

随机推荐

  1. Publish/Subscribe Model——Notification chain——观察者模式

    内核中用的很多,整理时间子系统的时候又遇到了notification mechanism,因此做次记录: 参考:1.http://msdn.microsoft.com/en-us/library/ff ...

  2. 【ES】简单使用

    import sys reload(sys) sys.setdefaultencoding('utf-8') from datetime import datetime from elasticsea ...

  3. 移动端网页使用flexible.js加入百度联盟广告样式不一致问题解决

    flexible.js是淘宝推出的一款移动端手机自适应的库,源码内容很简洁,当网页使用了该库之后,页面会在head中加入对应的页面响应式的meta标签. 当使用flexible.js的时候,引入百度联 ...

  4. vs2010如何安装qt插件

    Qt默认使用mingw编译,不支持VS编译器,因此,如果需要用VS开发,需要将Qt重新编译.前提:Qt已安装(http://qt.nokia.com/downloads-cn),VS已安装. 1.下载 ...

  5. 理解linux 块, i节点

    https://blog.csdn.net/zdf19/article/details/54424880 https://www.cnblogs.com/hnrainll/archive/2012/0 ...

  6. Git学习笔记(三)

    Git提交相关内容 在Git提交时,会保存一个提交对象,该对象包括一个指向暂存区内容快照的指针,包括本次提交作者等相关附属信息,包括零个或多个指向该提交对象的父对象指针:首次提交时是没有祖先,普通提交 ...

  7. Bypass D盾_IIS防火墙SQL注入防御(多姿势)

    0X01 前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防御策略 ...

  8. codeforces水题100道 第二十五题 Codeforces Round #197 A. Helpful Maths (Div. 2) (strings)

    题目链接:http://www.codeforces.com/problemset/problem/339/A题意:重新组合加法字符串,使得按照1,2,3的顺序进行排列.C++代码: #include ...

  9. iOS 沙盒目录结构及正确使用

    前言:处于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,比如在用户授权情况下访问通讯录,相册等),这个规则展示了iOS系统的封闭性.在开发中常常需要数据存储的功 ...

  10. x64免签名驱动程序

    DSEFix GitHub https://github.com/hfiref0x/DSEFix