JPEG图像扩展信息读取和修改
最近,项目需要使用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图片扩展信息读取与修改
extends:http://www.2cto.com/kf/201405/303813.html 读写均是键值对的方式,需要注意的是值的类型需要严格按照api定义格式. 支持读写节点为: 1.TAG ...
- JPEG图片扩展信息读取与改动
近日项目中须要用到往jpg图片中写入信息(非水印),经调研发现Android中已经封装了读写jpg图片扩展信息的api(ExifInterface). 相应api地址:http://developer ...
- MP3 信息读取
MP3 信息读取 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0: 编者:乌龙哈里 2017-03-13 参考: MP3-wikipedia ID3v1 MPE ...
- 【原创】JPEG图像密写研究(三) 数据流译码
[原创]这次更新比较慢,译码过程比想象中复杂一些,更主要是译出来的DCT系数无法确定是否正确,要想验证就需要再进行正向压缩编码,再次形成jpeg图像验证正确,后续工作正在开展,这里就说一说译码的主要思 ...
- C# 配置文件读取与修改
C# 配置文件读取与修改 配置文件在很多情况下都使用到, 配置文件分为两种 一种是应用程序的配置文件, 一种是web的配置文件. 两种配置文件最大的区别是web的配置文件更新之后会实时更新, 应用 ...
- C# 配置文件读取与修改(转)
C# 配置文件读取与修改 配置文件在很多情况下都使用到, 配置文件分为两种 一种是应用程序的配置文件, 一种是web的配置文件. 两种配置文件最大的区别是web的配置文件更新之后会实时更新, 应用 ...
- JPEG图像密写研究(一) JPEG图像文件结构
[转载]转载自http://www.cnblogs.com/leaven/archive/2010/04/06/1705846.html JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块. ...
- 【原创】JPEG图像密写研究(二) 哈夫曼树的建立
[原创]记录自己研究的过程,仅供参考,欢迎讨论... 在根据JPEG图像文件结构读取完文件后,提取出其中DHT段,利用其中内容建立哈夫曼树,便于之后译码工作.这里需要注意的是文件中的哈夫曼表数量不固定 ...
- Linux PCI/PCI-E设备配置空间读取与修改
Linux PCI/PCI-E设备配置空间读取与修改 1 前言 PCI和PCI Express,是计算机常使用的一种高速总线.操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及 ...
随机推荐
- screenX, clientX, pageX
screenX:鼠标相对屏幕左上角的水平偏移量. clientX:鼠标相对于浏览器左上角的水平偏移量,会随着滚动条的移动而移动. pageX:鼠标相对浏览器左上角的水平偏移量.不会随着滚动条的移动而移 ...
- poj 3100 (zoj 2818)||ZOJ 2829 ||ZOJ 1938 (poj 2249)
水题三题: 1.给你B和N,求个整数A使得A^n最接近B 2. 输出第N个能被3或者5整除的数 3.给你整数n和k,让你求组合数c(n,k) 1.poj 3100 (zoj 2818) Root of ...
- HDU 1425 sort hash+加速输入
http://acm.hdu.edu.cn/showproblem.php?pid=1425 题目大意: 给你n个整数,请按从大到小的顺序输出其中前m大的数. 其中n和m都是位于[-500000,50 ...
- C#+AE实现类似IDentify功能及对高亮显示相关接口的总结
kenika 原文C#+AE实现类似IDentify功能及对高亮显示相关接口的总结 ArcMap中的Identify功能是有目的查看要素(Feature)属性信息经常使用的工具.ArcMap中的Ide ...
- [TypeStyle] Style CSS pseudo elements with TypeStyle
Just like pseudo-classes, pseudo-elements are added to selectors but instead of describing a special ...
- <p><img src="http://img.blog.csdn.net/20150823142545135?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""></p>
/* 实现功能:用顺序表实现栈的各种操作 编译环境:Windows 64b,vc6.0 日期: 2015/7/20 作者:wtt561111 */ #define stack_max_num 10 # ...
- 【JAVA编码专题】总结 分类: B1_JAVA 2015-02-11 15:11 290人阅读 评论(0) 收藏
第一部分:编码基础 为什么需要编码:用计算机看得懂的语言(二进制数)表示各种各样的字符. 一.基本概念 ASCII.Unicode.big5.GBK等为字符集,它们只定义了这个字符集内有哪些字符,以及 ...
- 如何在 Linux 中统计一个进程的线程数
编译自:http://ask.xmodulo.com/number-of-threads-process-linux.html作者: Dan Nanni原创:LCTT https://linux.cn ...
- css聊天气泡样式
https://files.cnblogs.com/files/zonglonglong/%E8%81%8A%E5%A4%A9%E6%B0%94%E6%B3%A1.zip
- LDAP Browser/Editor v2.8.2
https://www.netiq.com/communities/cool-solutions/wp-content/uploads/sites/2/2009/07/Gawor_ldapbrowse ...