由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番。捣鼓出来了,写下,总结。

需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0。这2个jar包比较好找,地址就不写了,搜索下就OK。需要注意的是,mediautil-1.0这个jar包你需要修改下。因为,项目需要修改GPS,其提供的例子后面还提供了个地址,里面有5个java文件,拿出来,在项目中建好。然后在jar包将里面5个同名的文件删除,就OK了。否则你的例子会报错,还有,项目的JDK必须是1.5,编译环境也必须是1.5哦。这2个jar包,前者只能读,不能写,后者呢可以读也可以写,但是使用没有前者方便,因此仍然保留。

下面就帖2段代码,只贴main方法了。

先是读取EXIF信息的。

public static void main(String[] args) throws Exception {

File jpegFile = new File("D://nozip//4.jpg");

Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);

Directory exif = metadata.getDirectory(ExifDirectory.class);//这里要稍微注意下

Iterator tags = exif.getTagIterator();

while (tags.hasNext()) {

Tag tag = (Tag)tags.next();

System.out.println(tag);

}

}

上面写的稍微注意的地方是要注意ExifDirectory.class,因为ExifDirectory只是EXIF中大部分的参数,但是并不是所有的参数。比如要查看GPS的信息则需要GpsDirectory,而它和ExifDirectory都是继承自Directory。同样继承自Directory还有好几个,就看你需要的情况了。顺便贴下它的API。

再下面是写EXIF信息的。

/**

* 将照片中的信息进行重写

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception {

//原文件

InputStream fip = new BufferedInputStream(new FileInputStream("D://nozip//2.jpg")); // No need to buffer

LLJTran llj = new LLJTran(fip);

try {

llj.read(LLJTran.READ_INFO, true);

} catch (LLJTranException e) {

e.printStackTrace();

}

Exif exif = (Exif) llj.getImageInfo();

/* Set some values directly to gps IFD */

Entry e;

// Set Latitude

e = new Entry(Exif.ASCII);

e.setValue(0, 'N');

exif.setTagValue(Exif.GPSLatitudeRef,-1, e, true);

//设置具体的精度

e = new Entry(Exif.RATIONAL);

e.setValue(0, new Rational(31, 1));

e.setValue(1, new Rational(21, 1));

e.setValue(2, new Rational(323, 1));

exif.setTagValue(Exif.GPSLatitude,-1, e, true);

// Set Longitude

e = new Entry(Exif.ASCII);

e.setValue(0, 'E');

exif.setTagValue(Exif.GPSLongitudeRef,-1, e, true);

//设置具体的纬度

e = new Entry(Exif.RATIONAL);

e.setValue(0, new Rational(120, 1));

e.setValue(1, new Rational(58, 1));

e.setValue(2, new Rational(531, 1));

exif.setTagValue(Exif.GPSLongitude,-1, e, true);

llj.refreshAppx(); // Recreate Marker Data for changes done

//改写后的文件,文件必须存在

OutputStream out = new BufferedOutputStream(new FileOutputStream("D://nozip//1.jpg"));

// Transfer remaining of image to output with new header.

llj.xferInfo(null, out, LLJTran.REPLACE, LLJTran.REPLACE);

fip.close();

out.close();

llj.freeMemory();

}

将图片中的GPS信息进行重写后,再用上面读GPS的来读将读取不到任何信息,只能在ExifDirectoy里面才能读到了,但是都是unkown tag了,很是奇怪。但是,机器等设备还是可以读到信息的。

from: http://www.aiuxian.com/article/p-2976272.html

java exif_照片EXIF信息的读取和改写的JAVA实现相关推荐

  1. java 修改exif_照片EXIF信息的读取和改写的JAVA实现

    由于项目需要对照片的EXIF信息进行处理,因此在网上搜索了一番.捣鼓出来了,写下,总结. 需要用到2个jar包,metadata-extractor-2.3.1和mediautil-1.0.这2个ja ...

  2. java 修改照片exif信息

    参考文章: java更改图片拍摄信息及其他Exif详细信息 Java修改图片元数据Exif信息 Commons Imaging开源网站介绍 引入类 <dependency><grou ...

  3. php 获取照片信息,PHP中读取照片exif信息的方法

    这篇文章主要介绍了PHP中读取照片exif信息的方法,本文从什么是exif信息开始讲解,使用PHP需要什么扩展.及它的安装方法和使用代码示例等,需要的朋友可以参考下 先来了解什么是图片的Exif信息 ...

  4. 怎么查看图片像素和大小?照片exif信息怎么看?

    在网络上下载图片都能看到图片大小,但是如果是我们平时自己拍摄或者进行过图片处理的该怎么查看图片大小呢.有些朋友可能会下载图片信息查看器来查询图片信息,其实还有一种更加简单的方法,使用压缩图的EXIF信 ...

  5. 纯 python 开发批量读取照片 Exif 信息的小程序

    自己动手写一些小程序解决工作中的问题,是学习 python 的高效途径.这中间会遇到一些不动手想不到的问题,一个一个地解决它们,你 python 开发水平就会突飞猛进! 本文总结一下实战 python ...

  6. java去掉图片上的meta信息,保护隐私,一键清除照片 EXIF 信息:Metapho

    大家都知道,用相机或手机拍摄的原始照片里,会存有 EXIF 信息,里面包括了拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件以及相机品牌.型号.色彩编码甚至地理位置. 在 iPhon ...

  7. web获取照片EXIF信息(例如:拍照方向、相机设备型号、拍摄时间、ISO 感光度、GPS 地理位置等数据)

    目录 前言 具体使用 1.手机打开相应功能,拍照时开启定位 2.运行exif.html 3.根据提示上传图片,获取信息 4.GPS信息获取 代码 exif.html 前言 插件:Exif.js 插件文 ...

  8. Python解析照片EXIF信息,获取坐标位置

    目录 1.背景 2.云端部署 3.照片分析 1.背景 每张图片都包含EXIF信息,它是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据.EXIF可以附加于JPE ...

  9. 查看照片EXIF信息的类

    网站发现了一个查看jpeg类型照片的exif信息的类,在这里分享下 <?php /** * @Author: TonyLevid * @Copyright: TonyLevid.com * @N ...

最新文章

  1. 快收藏!整理了 100 个 Python 小技巧
  2. synchronized为可重入锁
  3. [Hnoi2006]马步距离
  4. 为什么vue-loader设置transformasseturls无效_拓展训练中“常见的无效提问”
  5. 由异常掉电问题---谈xfs文件系统
  6. ubuntu之搭建http服务器apache2
  7. python基础:re模块匹配时贪婪和非贪婪模式
  8. 【红顶商人胡雪岩】-- 读完一点小感
  9. 正则RegExp对象的用法
  10. PHP 省市区 最新最全json生成
  11. 径向基和径向基神经网路
  12. ActiveMQ 反序列化漏洞 (CVE-2015-5254)复现
  13. 前端vue使用ECharts如何制作精美统计图
  14. php 删除文件 unlink,如何使用php unlink删除文件
  15. latex_子图标题带括号
  16. 你还在靠“喂喂喂”来测语音通话质量吗,看完这篇文章你就能掌握正确姿势。
  17. 美团点评前端面试小结
  18. HTML网页设计:六、列表
  19. step5 lasso 回归 实战 本文没有考虑y 是cox和binominal
  20. netstat -an中stat含义

热门文章

  1. 高压包输出信号经过整流后形成直流电流
  2. 为什么面包板不能够做射频电路实验?
  3. elf section类型_ELF文件解析(一):Segment和Section
  4. 泡椒java_吃货联盟 源代码 Java初级小项目
  5. 初中数学老师计算机培训反思,初中数学教师培训心得体会
  6. sql语句没错 mysql.data.dll类型的异常_未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。...
  7. Rust 交叉编译设置
  8. 如何面试java后端_近期面试Java后端的一些感悟
  9. c语言全局变量符号,C语言中的 @ 符号是什么意思?
  10. java web oracle 分页_Oracle分页的两种方式