近日项目中须要用到往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节点的话,那么前边的转换方法就能够省掉了。

有兴趣的朋友能够考证一下哦。

转载于:https://www.cnblogs.com/mqxnongmin/p/10548687.html

JPEG图片扩展信息读取与改动相关推荐

  1. Exifinterface图片扩展信息EXIF

    一.ExifInterface类给我们了一个实用的方法publicbyte[]getThumbnail()这个方法可以生成一个缩略图,返回一个字节数组,我们通过以前讲到的通过OutputStream将 ...

  2. android 读取图片信息,Android 图片Exif 信息读取和写入

    引用3rd jar来实现信息写入 下载 commons-imaging-1.0-SNAPSHOT.jar, 这个方法的好处是如果图片里面没有字段. 比如orientation 没有,但是 还可以写入. ...

  3. android获取本地图片后缀,Android向图片文件添加扩展信息EXIF如地点,时间,人物等...

    最近在做一个功能,需要获取图片的拍摄时的地理位置信息,经纬度 我一直想找怎样把经纬度直接存放到文件信息里面去,不然太难维护一一对应的这些信息了,最后终于被我找到了,那就是伟大的图片扩展信息 EXIF ...

  4. 【图像处理】jpeg图片格式详解

    jpeg图片格式详解 1. JPEG文件简介 JPEG的全称是JointPhotographicExpertsGroup(联合图像专家小组),它是一种常用的图像存储格式, jpg/jpeg是24位的图 ...

  5. JPEG图片格式简单分析

    JPEG文件格式简单分析 作者:小爽 摘要: 这篇文章大体上介绍了JPEG文件的结构信息以及它的压缩算法和编码方式.使读者能够对JPEG文件格式有大体上的了解.为读者进一步进行学习JPEG文件压缩做好 ...

  6. java exif 语言编码_Java读取图片EXIF信息的代码

    Java读取图片EXIF信息的代码 本文实例讲述了Java读取图片EXIF信息的方法.分享给大家供大家参考.具体分析如下: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image ...

  7. java根据exif旋转,关于图片文件旋转JPEG与EXIF信息

    关于图片文件旋转JPEG与EXIF信息 2019/10/31 0:36:39  YuLimin  程序员俱乐部  我要评论(1) 摘要:关于图片文件旋转JPEG与EXIF信息比如某相机拍摄出来的相片, ...

  8. jpg图片与jpeg图片格式的区别(没有区别,.jpg只是扩展名.jpeg的缩写)JPEG图像压缩(YUV4:2:0 缩减采样、缩减取样)(离散余弦变换 DCT算法)(量化)(熵编码)(霍夫曼哈夫曼)

    文章目录 20191026 20220414 更新,更系统去了解里面的编码压缩流程 科普:关于图像格式JPG和JPEG你知多少? 一.前言 二.JPEG和JPG的关系 三.色彩空间转换 缩减取样 离散 ...

  9. 关于图片文件旋转JPEG与EXIF信息

    关于图片文件旋转JPEG与EXIF信息 比如某相机拍摄出来的相片,文件分辨率比如宽度7360像素,高度4912像素 十进制表示为 DEC : 7360 * 4912 十六进制则为 HEX : 1CC0 ...

最新文章

  1. 金九银十征服、阿里、京东、字节跳动,的程序员和他们的公众号
  2. java 字节 操作_实例解析Java byte数组操纵方式代码
  3. PDF数据防扩散系统方案
  4. 2010-2011年中国嵌入式开发从业人员调查报告隆重推
  5. CentOS6 下Samba服务器的安装与配置
  6. Something about WMI
  7. 《健康报》携手健康之路帮助医院医生免费搭建微官网
  8. ftp文件服务器坑,Java实现FTP上传文件到Linux服务器的那些坑
  9. 地图标识符号大全_资源小结:中国分省地图大全(10.23版)
  10. 达内JAVA云笔记_达内云笔记项目完整代码+注释
  11. 【唯美·音乐】唯美舒缓钢琴曲,给你心灵最深处的宁静
  12. 2021-03-22 unI-app 前端直播推流实现
  13. 从零搭建游戏服务器,拢共分几步?
  14. Android轻量级APM性能监测方案
  15. new HashMap(list.size())指定size就能完全避免扩容带来的额外开销了吗?
  16. 用Python 做成语接龙,超简单,有语音,过年和孩子玩
  17. 普通防火墙和现代防火墙有什么区别
  18. 研报精选230410
  19. 微带滤波器摘要_滤波器详细分类摘要.ppt
  20. 趣头条递交招股书:最高融资3亿美元 挖掘下沉人群市场

热门文章

  1. 经验之谈:Linux运维工程师所需技能
  2. 网易2017春招笔试真题编程题集合(5)——魔力手环
  3. 共享卫士2.0版设置说明
  4. 网站制作之按钮onclick大全
  5. python调用Shell脚本:os.system(cmd)或os.popen(cmd),
  6. 为什么 MySQL 使用 B+ 树,而不是 B 树或者 Hash?
  7. 拜托,面试别再问我表达式求值了!!!
  8. 不想当亿万富翁的程序员不是好老板
  9. Consul入门02 - 运行Consul代理
  10. Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】