读jpeg的exif的方法:
metadata-extractor
http://www.drewnoakes.com/code/exif/
这个是比较完整的读取包了,但是没有写的功能,所以另外找了一个
读/写jpeg的metadata
mediautil是sourceforge的mediachest的java api 子项目
http://mediachest.sourceforge.net/mediautil/
不过文档不是太完整,研究了半天终于找到读写的方法了
InputStream fip = new FileInputStream(filename);
LLJTran llj = new LLJTran(fip);
llj.read(LLJTran.READ_INFO,true);
llj.setComment(“test jpeg comment”);
llj.setAppx(0,LLJTran.dummyExifHeader,0,LLJTran.dummyExifHeader.length,true);
Exif exif = (Exif) llj.getImageInfo();
Entry entry = new Entry(Exif.ASCII);
entry.setValue(0,”test exif user comment”);
exif.setTagValue(Exif.USERCOMMENT,-1,entry,true);
llj.refreshAppx();
fip = new BufferedInputStream(new FileInputStream(filename));
OutputStream out = new BufferedOutputStream(new FileOutputStream(destfile));
llj.xferInfo(fip, out, LLJTran.REPLACE, LLJTran.REPLACE);
fip.close();
out.close();
llj.freeMemory();
首先用 LLJTran.READ_INFO 模式把jpeg的header和exif信息读入,不需要整个文件的读取。
然后编辑jpeg commnet 和exif信息
最后调用 llj.xferInfo 把header和exif信息,图象信息写入到新文件中,其中LLJTran.REPLACE 是指替换掉原来文件中的信息,可以用LLJTran.RETAIN来保持不便,第一个指定是exif,第二个是jpeg comment。
读取刚才写的2个信息
InputStream fip = new FileInputStream(destfile); // No need to buffer
LLJTran llj = new LLJTran(fip);
Log.debugLevel = Log.LEVEL_NONE;
llj.read(LLJTran.READ_HEADER,true);
System.out.println(llj.getComment());
System.out.println(((Exif)llj.getImageInfo()).getTagValue(Exif.USERCOMMENT,true));
基本就是这样,当然如果要通用的话还要加一些简单的判断。
另外AcdSee生成的exif 2.2格式用这个mediautil读取好像有点问题,不过mediautil生成的exif 2.2用AcdSee读取就一点问题都没有,可能是兼容问题吧,再研究研究规范。
花了一个下午,把exif 2.2的文档看了下,原来comment里面的格式没有规定,可以用unicode格式:
UNICODE(后面是UTF16-LE字符)
前面几个是utf8 字符,考~
做这个的主要目的是在自己生成的图片上面加一些固定格式的信息,等用户上传的时候可以知道这个图片的概况。。。。如果要我做OCR分析的话我可没有这个能力。。。
August 23rd, 2008 12:09:23
請問可以教我怎麼用Metadata將EXIF讀出以及寫入到EIXF嗎
如果能的話請幫我
howadtsai@Yahoo.com.tw
August 23rd, 2008 22:41:17
不好意思,好久没看过这方面的了,有空我再看看,呵呵
August 26th, 2008 15:33:53
我不會將經緯度寫入GPS中不過你的檔案可以讀出EXIF
並且創造一個新圖片了已經幫上忙了卸卸
如果能的話請交我如何在EXIF中加入GPS 經緯度的值
August 26th, 2008 17:46:46
用mediautil可以写入EXIF,上面就有例子了
至于GPS信息不是太清除,如果只是EXIF中的信息,你研究一下它的规范应该就可以写入了。
我找了一下,文档如下:
http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html
These GPS tags are part of the EXIF standard, and are stored in a separate IFD within the EXIF information.
关键是这句,估计你还要找下EXIF的文档看看。呵呵。
August 26th, 2008 17:49:12
我上面的例子里面
entry.setValue(0,”test exif user comment”);
exif.setTagValue(Exif.USERCOMMENT,-1,entry,true);
这两句你要研究下,我都忘记是什么了,呵呵
估计是你把GPS对应的tag设置好应该就可以了。