`
jsnjlc
  • 浏览: 50925 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

照片EXIF信息的读取和改写的JAVA实现

    博客分类:
  • Java
阅读更多

由于项目需要对照片的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信息的。

  1. public   static   void  main(String[] args)  throws  Exception {
  2.          File jpegFile =  new  File( "D:\\nozip\\4.jpg" );
  3.          Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
  4.          Directory exif = metadata.getDirectory(ExifDirectory. class ); //这里要稍微注意下
  5.          Iterator tags = exif.getTagIterator();
  6.           while  (tags.hasNext()) {
  7.              Tag tag = (Tag)tags.next();
  8.              System.out.println(tag);
  9.          }
  10.     }

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

再下面是写EXIF信息的。

  1. /**
  2.      * 将照片中的信息进行重写
  3.      * @param args
  4.      * @throws Exception
  5.      */
  6.      public   static   void  main(String[] args)  throws  Exception {
  7.          //原文件
  8.         InputStream fip =  new  BufferedInputStream( new  FileInputStream( "D:\\nozip\\2.jpg" ));  // No need to buffer
  9.         LLJTran llj =  new  LLJTran(fip);
  10.          try  {
  11.             llj.read(LLJTran.READ_INFO,  true );
  12.         }  catch  (LLJTranException e) {
  13.             e.printStackTrace();
  14.         }
  15.         Exif exif = (Exif) llj.getImageInfo();      
  16.         
  17.          /* Set some values directly to gps IFD */
  18.                 
  19.         Entry e;
  20.          // Set Latitude
  21.         e =  new  Entry(Exif.ASCII);        
  22.         e.setValue( 0 'N' );
  23.         exif.setTagValue(Exif.GPSLatitudeRef,- 1 , e,  true );
  24.          //设置具体的精度
  25.          e =  new  Entry(Exif.RATIONAL);
  26.         e.setValue( 0 new  Rational( 31 1 ));
  27.         e.setValue( 1 new  Rational( 21 1 ));
  28.         e.setValue( 2 new  Rational( 323 1 ));
  29.         exif.setTagValue(Exif.GPSLatitude,- 1 , e,  true );
  30.         
  31.          // Set Longitude
  32.         e =  new  Entry(Exif.ASCII);
  33.         e.setValue( 0 'E' );
  34.         exif.setTagValue(Exif.GPSLongitudeRef,- 1 , e,  true );
  35.         
  36.          //设置具体的纬度
  37.          e =  new  Entry(Exif.RATIONAL);
  38.         e.setValue( 0 new  Rational( 120 1 ));
  39.         e.setValue( 1 new  Rational( 58 1 ));
  40.         e.setValue( 2 new  Rational( 531 1 ));
  41.         exif.setTagValue(Exif.GPSLongitude,- 1 , e,  true );
  42.         
  43.         llj.refreshAppx();  // Recreate Marker Data for changes done
  44.          //改写后的文件,文件必须存在
  45.          OutputStream out =  new  BufferedOutputStream( new  FileOutputStream( "D:\\nozip\\1.jpg" ));
  46.          // Transfer remaining of image to output with new header.
  47.         llj.xferInfo( null , out, LLJTran.REPLACE, LLJTran.REPLACE);
  48.         fip.close();
  49.         out.close();
  50.         llj.freeMemory();
  51.     }

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

分享到:
评论
1 楼 zengyan2012 2013-02-19  
Exif.GPSLongitude  我这里怎么没有这个常量。。。

相关推荐

    JAVA读取照片信息 exif

    在Java编程中,读取照片信息,特别是Exif(Exchangeable Image File Format)元数据,是一种常见的需求。Exif信息通常包含拍摄日期、时间、地理位置、相机型号、曝光参数等重要数据,对于图像处理和分析非常有用。在...

    用C#读取图片的EXIF信息的方法(读取照片ISO等信息原代码)

    摘要:本文讲述了使用 C# 读取图片的 EXIF 信息的方法,包括读取照片 ISO 感光度、曝光时间、快门速度、闪光灯、曝光模式、照片宽度、高度、f 值、曝光程序、光谱感知、EXIF 版本、色彩设置、压缩比率、光圈值、亮度...

    照片EXIF信息的读取和改写jar包

    开源图片详细信息提取metadata-extractor,一个很好的开源类库metadata-extractor处理jpeg图片

    VB IPTC信息读取 VB EXIF信息读取

    总之,VB IPTC和EXIF信息读取是图像处理软件开发中的一部分,通过解析和利用这些元数据,可以实现丰富的图像管理和编辑功能。在实际项目中,开发者需要根据具体需求,结合上述步骤和提供的文件资源,编写出符合要求...

    java读取图片exif信息

    总之,通过使用Apache Commons Imaging库,Java开发者可以方便地读取和处理图像文件的EXIF数据,从而实现各种功能,如照片的元数据分析、图片管理、信息提取等。了解并熟练掌握这一技术对于从事与图像处理相关的IT...

    C++读取EXIF信息

    本项目提供了用C++编写的读取EXIF信息的类,使得开发者无需深入了解EXIF的复杂结构,就能方便地从图片文件中提取这些数据。下面我们将深入探讨这个类的实现原理和使用方法。 首先,C++类的设计通常包含构造函数、析...

    java处理EXIF信息方法

    通过以上步骤,我们可以使用Java有效地处理和分析图像文件中的EXIF信息,特别是与GPS相关的数据。这在地理标记、照片管理和图像分析等场景中非常有用。然而,处理这类数据时,务必遵循隐私保护法规,尊重用户的隐私...

    读取照片的Exif信息

    在IT行业中,读取照片的Exif信息通常涉及到图像处理库或编程语言的相关API。下面我们将详细探讨如何操作: 1. **编程语言支持**:大部分主流编程语言如Python、Java、C#、JavaScript等都有相应的库或模块来处理Exif...

    delphi xe 读取照片缩略图及EXIF信息源码

    这个源码示例是关于如何使用Delphi XE来读取照片的缩略图和EXIF信息,这对于图像处理或者照片管理软件的开发非常重要。 EXIF(Exchangeable Image File Format)是嵌入在JPEG或TIFF等图像文件中的元数据,包含拍摄...

    获取照片的Exif信息

    3. 编程方式获取:对于开发者而言,可以通过编程语言实现Exif信息的读取。例如,Python有PIL(Python Imaging Library)和exifread库,Java有Apache Commons Imaging库,JavaScript有ExifReader等。这些库提供了API...

    Exif信息读取

    首先,要实现Exif信息的读取,我们需要了解Exif数据结构。Exif信息通常遵循TIFF(Tagged Image File Format)标准,以二进制形式存储在JPEG或RAW图像文件中。数据以标签(Tags)的形式存在,每个标签都有特定的ID和...

    Java读取照片地址、GPS信息、定位照片精确位置完整项目【附测试照片一张】.zip

    综上所述,这个项目涵盖了Java处理照片元数据的关键技术,通过学习和实践,开发者可以掌握如何在Java环境中读取和解析照片的Exif信息,实现照片的精确定位和分析。同时,提供的测试照片也是一个很好的实践素材,可以...

    读取数码照片EXIF信息源码

    在Delphi编程环境中,"Exif.pas"文件可能是一个实现读取EXIF信息的单元,包含了必要的函数和类来处理这一任务。这个源码可能提供了如`ReadExifFromJPEG`这样的函数,用于从JPEG格式的图片中提取EXIF数据。 1. **...

    VC读取JPG照片Exif信息(VS2010编译通过)

    2. **EXIF.CPP**:这可能是实现Exif数据处理的核心代码,包含读取和解析Exif信息的具体函数。 3. **ExifTestDlg.cpp**:对话框类的实现文件,可能包含了与用户交互的部分,如显示Exif信息的界面元素。 4. **ExifTest...

    java获取图片的EXIF信息

    首先,我们需要了解Java中用于处理图像和EXIF信息的主要类库。Java标准库提供了一个名为`javax.imageio`的包,其中包含`ImageIO`类,可以用来读取和写入图像文件。然而,`ImageIO`并不直接支持读取EXIF数据,所以...

    VC读取JPG的EXIF信息的一个类

    1. `EXIF.CPP`:这是实现EXIF信息读取功能的核心源代码文件,包含了类的定义和相关函数实现。 2. `ExifTestDlg.cpp`、`ExifTest.cpp`、`StdAfx.cpp`:这些是应用程序的源代码文件,可能包含了测试EXIF读取类的代码...

    照片自动分类归并,自动读取照片文件的exif信息.rar

    照片自动分类归并,自动读取照片文件的exif信息.rar

    exif-js_2.3.0_exif_信息读取_图片_

    1. **照片验证**:通过检查EXIF中的时间戳和其他信息,可以验证照片是否未经篡改。 2. **地理位置标记**:如果照片包含GPS数据,可以显示照片拍摄地点。 3. **艺术或技术分析**:了解摄影参数如快门速度、光圈大小、...

    exif 的 C++ 读取类,可以返回数码照片中的各种参数信息

    总之,Exif的C++读取类是一个用于解析和提取数码照片元数据的工具,它可以帮助开发者获取到照片拍摄时的各种参数信息,如时间、地点、设备信息等,这些信息在照片分析、图像处理和数据分析等领域都有重要应用。...

Global site tag (gtag.js) - Google Analytics