由于项目需要对照片的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. 隐藏表白技能,python教你如何使用图片exif信息隐藏表白,教你如何修改,查询exif信息。

    " 隐藏表白技能" 你有想过一张图片所包含的信息吗?你有想过一张图片可以为你隐藏表达一些内容吗?你有想过图片的隐藏信息可以为你表达你想要说明的东西吗?以及你可以 用图片去表达你的爱 ...

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

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

  6. 使用libexif开源库修改jpeg相片exif信息

    使用libexif开源库修改jpeg相片exif信息 libexif简介 一.读exif信息 二.写exif信息 说明 例:修改exif中GPS海拔高度 libexif简介 libexif是一个开源的 ...

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

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

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

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

  9. 使用imageIO获取和修改图片的exif信息

    看到这篇文章.喜欢的不得了-转来分享给大家! 一幅图片除了包含我们能看见的像素信息,背后还包含了拍摄时间,光圈大小,曝光等信息.UIImage类将这些细节信息都隐藏了起来,只提供我们关心的图片尺寸,图 ...

最新文章

  1. 一天1个机器学习知识点(二)
  2. 如何调用DLL (基于Visual C++6.0的DLL编程实现)
  3. android 框架LoonAndroid,码农偷懒专用(2014/8/6更新)
  4. POJ-3070 Fibonacci 快速矩阵幂
  5. python审计ssh_代码分享:用Python编写的多协议弱密码审计工具集
  6. 干货 | 深度学习的可解释性研究(一):让模型「说人话」
  7. hihoCoder挑战赛25
  8. 雷林鹏分享:Laravel 安装
  9. 前端知识整理 CSS盒模型
  10. pbl和sbl_PBL与SBL联合教学模式在妇产科教学中的应用研究
  11. 腾讯云的云数据库MYSQL配置
  12. DHTML【4】--HTML
  13. matlab绘制符号函数的ezplot函数
  14. [Android] 安卓迅雷带云盘内测版7.0 简洁 无广告 官方版
  15. 神经网络前景背景分析,人工神经网络研究背景
  16. [日推荐]『识花草』做个辛勤的小园丁
  17. mame android版本,重整街机模拟器MAME(Android版)
  18. ElasticSearch系列——Kibana,核心概念
  19. 快速集成腾讯云短信实现短信发送(Spring Boot)
  20. 汇编语言课程设计动态图形设计小车动态图形

热门文章

  1. Fusion Access基本操作
  2. JAVA-JSON文件转excel文件
  3. 团体天梯 L2-030 冰岛人 (25 分)(思路、测试点分析)
  4. 微软反盗版 小心别砸了自己的脚
  5. 5G跟人工智能有关系吗?
  6. Ghost 博客系统终极安装教程,装不上来打我!
  7. 糖儿飞教你学C++ Socket网络编程——5.2 TCP通信程序的函数及流程总结
  8. 比赛难度(HDU4546)
  9. python后端脚本停止运行_Python 启动/停止脚本(后台服务)
  10. python批量重命名工具