JPEG图片扩展信息读取与修改
来源:互联网 发布:怎么通过关键字查域名 编辑:程序博客网 时间:2024/05/18 22:18
近日项目中需要用到往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();}
private String gpsInfoConvert(double gpsInfo){gpsInfo = Math.abs(gpsInfo);String dms = Location.convert(gpsInfo, Location.FORMAT_SECONDS);String[] splits = dms.split(":");String[] secnds = (splits[2]).split("\\.");String seconds;if (secnds.length == 0) {seconds = splits[2];} else {seconds = secnds[0];}return splits[0] + "/1," + splits[1] + "/1," + seconds + "/1";}
疑问:
官方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图片扩展信息读取与修改
- 读取和修改JPEG图片文件的头信息EXIF和JFIF
- 使用OpenExif修改jpeg图片信息
- C#读取JPEG Exif 信息
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换
- Jpeg图片属性读取EXIF
- jpeg图片的exif信息
- Java 读取 JPEG 文件的 exif 信息
- java读取JPEG中exif中信息
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上)
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(下)
- DELPHI如何读取数据库中jpeg图片
- linux 下 读取 jpeg 图片 - 代码片段
- 提取JPEG图片中的EXIF信息
- 读取bmp图片的文件头,与位图信息头
- 修改图片exif信息
- 图片质量压缩 与 图片格式 JPEG PNG
- IOS 如何获取与修改图片的EXIF信息
- Leetcode中几道二叉树题 I
- C 、C++编译的奇怪错误
- tomcat之组成结构
- mcfw框架介绍
- Linux vi编辑器详解
- JPEG图片扩展信息读取与修改
- Kafka - Version 0.8.1.1更新说明
- 饭卡
- PE文件格式系列译文之
- 一个简单多线程爬虫的实现
- AAM Alignment最后一篇:Robust AAM Alignment with Occlusion
- 使用ab进行页面的压力测试
- java 代理(proxy)模式
- 轻松搭建一个Windows SVN服务器