码迷,mamicode.com
首页 > 其他好文 > 详细

JPEG图片扩展信息读取与修改

时间:2014-05-25 09:47:13      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:android   exif   图片   经纬度   扩展信息   

近日项目中需要用到往jpg图片中写入信息(非水印),经调研发现Android中已经封装了读写jpg图片扩展信息的api(ExifInterface)。

对应api地址:http://developer.android.com/reference/android/media/ExifInterface.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();
}


疑问:

官方api:

public boolean getLatLong (float[] output)

释义:Stores the latitude and longitude value in a float array. The first element is the latitude, and the second element is the longitude. Returns false if the Exif tags are not available.

此方法是以浮点型数组来存储经纬度信息的,具体存储到哪个节点有待考证,如果是自动存储到TAG_GPS_LATITUDE和TAG_GPS_LONGITUDE节点的话,那么前边的转换方法就可以省掉了。有兴趣的朋友可以考证一下哦。




JPEG图片扩展信息读取与修改,布布扣,bubuko.com

JPEG图片扩展信息读取与修改

标签:android   exif   图片   经纬度   扩展信息   

原文地址:http://blog.csdn.net/michael_liu_89/article/details/26879413

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!