由于项目需要对照片的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信息的。
-
-
-
-
-
-
public
static
void
main(String[] args)
throws
Exception {
-
- InputStream fip =
new
BufferedInputStream(
new
FileInputStream(
"D:\\nozip\\2.jpg"
));
- LLJTran llj =
new
LLJTran(fip);
-
try
{
- llj.read(LLJTran.READ_INFO,
true
);
- }
catch
(LLJTranException e) {
- e.printStackTrace();
- }
- Exif exif = (Exif) llj.getImageInfo();
-
-
-
- Entry e;
-
- 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
);
-
-
- 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();
-
- OutputStream out =
new
BufferedOutputStream(
new
FileOutputStream(
"D:\\nozip\\1.jpg"
));
-
- llj.xferInfo(
null
, out, LLJTran.REPLACE, LLJTran.REPLACE);
- fip.close();
- out.close();
- llj.freeMemory();
- }
将图片中的GPS信息进行重写后,再用上面读GPS的来读将读取不到任何信息,只能在ExifDirectoy里面才能读到了,但是都是unkown tag了,很是奇怪。但是,机器等设备还是可以读到信息的。
分享到:
相关推荐
开源图片详细信息提取metadata-extractor,一个很好的开源类库metadata-extractor处理jpeg图片
VB IPTC信息读取 VB EXIF信息读取
摘要:本文讲述了使用 C# 读取图片的 EXIF 信息的方法,包括读取照片 ISO 感光度、曝光时间、快门速度、闪光灯、曝光模式、照片宽度、高度、f 值、曝光程序、光谱感知、EXIF 版本、色彩设置、压缩比率、光圈值、亮度...
使用方法 加上一个用到的jar包metadata-extractor-2.3.1.jar
delphi xe 读取照片缩略图及EXIF信息源码,测试通过。
用C++写的读取图片EXIF信息的类,封装好的,可以直接使用
ExifTranslate.pas 用于翻译Exif信息为文本的接口实现(读取ExifTags.txt内容并将其Tag名翻译成英文名称) 可继承TDefaultTranslate、TFileTranslate或另外实现IExifTranslate接口并传递给TExif的Create方法,以实现...
照片自动分类归并,自动读取照片文件的exif信息.rar
读取数码照片EXIF信息源码
一个C++实现的读取照片的exif信息,用Qt写了个简单的界面
EXIF(Exchangeable image file format)是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。该代码读取该信息,供用户或编程使用。
这个项目根据网上各位大牛的博客、讨论而来,主要是解决网上很多人碰到的使用JAVA修改照片的EXIF信息的问题——mediautil.image.jpeg.JPEG cannot be cast to mediautil.image.jpeg.Exif 。EXIF是 Exchangeable ...
public class EXIF { #region -- Class level members -- // Class level members. private Image _picture; #endregion #region -- Constructors -- // Constructors. /// /// This is default ...
通过导入一张图片,调用封装好的函数尽心解析图片的信息,可以提取里面全部信息,例如经纬度,时间,相机的信息,光照,高度,等等,你需要按照一下步骤进行了 Cexif exif; // EXIFINFO pexif=(EXIFINFO *)malloc...
读取图片的拍摄时间、相机厂商
NULL 博文链接:https://eric-gao.iteye.com/blog/1573280
exif 的 C++ 读取类,可以返回数码照片中的各种参数信息
java 获取相片exif信息 自动缩放
可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。python批量修改照片exif信息,修改gps信息,给有需要批量修改...
java获取图片的EXIF信息,其中包括 反射机制