`
snake_hand
  • 浏览: 624745 次
社区版块
存档分类
最新评论

java读取JPEG中exif中信息

 
阅读更多

欢迎大家访问我的个人网站 萌萌的IT人

一般的相机会记录一些图片基本信息之外的扩展信息,例如,经纬度信息,存储与exif中,如下图!

一般情况下是java程序读取不到gps等扩展信息的。如果想要解析到里面的信息需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址:http://code.google.com/p/metadata-extractor/),这个jar提供了支持获取扩展信息的功能。

具体实现的代码如下:

 

  1. package com.drew.metadata;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import com.drew.imaging.ImageMetadataReader;  
  7. import com.drew.imaging.ImageProcessingException;  
  8.   
  9. public class SampleUsage  
  10. {  
  11.    /** 
  12.     * 图片信息获取metadata元数据信息 
  13.     * @param fileName 需要解析的文件 
  14.     * @return 
  15.     */  
  16.     public ImgInfoBean parseImgInfo (String fileName)  
  17.     {  
  18.         File file = new File(fileName);  
  19.         ImgInfoBean imgInfoBean = null;  
  20.         try {  
  21.             Metadata metadata = ImageMetadataReader.readMetadata(file);  
  22.             imgInfoBean = printImageTags(file, metadata);  
  23.         } catch (ImageProcessingException e) {  
  24.             System.err.println("error 1a: " + e);  
  25.         } catch (IOException e) {  
  26.             System.err.println("error 1b: " + e);  
  27.         }  
  28.         return imgInfoBean;  
  29.     }  
  30.   
  31.     /** 
  32.      * 读取metadata里面的信息 
  33.      * @param sourceFile 源文件 
  34.      * @param metadata metadata元数据信息 
  35.      * @return 
  36.      */  
  37.     private ImgInfoBean printImageTags(File sourceFile, Metadata metadata)  
  38.     {  
  39.         ImgInfoBean imgInfoBean = new ImgInfoBean ();  
  40.         imgInfoBean.setImgSize(sourceFile.getTotalSpace());  
  41.         imgInfoBean.setImgName(sourceFile.getName());  
  42.         for (Directory directory : metadata.getDirectories()) {  
  43.             for (Tag tag : directory.getTags()) {  
  44.                 String tagName = tag.getTagName();  
  45.                 String desc = tag.getDescription();  
  46.                 if (tagName.equals("Image Height")) {  
  47.                     //图片高度  
  48.                     imgInfoBean.setImgHeight(desc);  
  49.                 } else if (tagName.equals("Image Width")) {  
  50.                     //图片宽度  
  51.                     imgInfoBean.setImgWidth(desc);  
  52.                 } else if (tagName.equals("Date/Time Original")) {  
  53.                     //拍摄时间  
  54.                     imgInfoBean.setDateTime(desc);  
  55.                 } else if (tagName.equals("GPS Altitude")) {  
  56.                     //海拔  
  57.                     imgInfoBean.setAltitude(desc);  
  58.                 } else if (tagName.equals("GPS Latitude")) {  
  59.                     //纬度  
  60.                     imgInfoBean.setLatitude(pointToLatlong(desc));  
  61.                 } else if (tagName.equals("GPS Longitude")) {  
  62.                     //经度  
  63.                     imgInfoBean.setLongitude(pointToLatlong(desc));  
  64.                 }  
  65.             }  
  66.             for (String error : directory.getErrors()){  
  67.                 System.err.println("ERROR: " + error);  
  68.             }  
  69.         }  
  70.         return imgInfoBean;  
  71.     }  
  72.   
  73.     /** 
  74.      * 经纬度转换  度分秒转换 
  75.      * @param point 坐标点 
  76.      * @return 
  77.      */  
  78.     public String pointToLatlong (String point ) {  
  79.         Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim());  
  80.         Double fen = Double.parseDouble(point.substring(point.indexOf("°")+1, point.indexOf("'")).trim());  
  81.         Double miao = Double.parseDouble(point.substring(point.indexOf("'")+1, point.indexOf("\"")).trim());  
  82.         Double duStr = du + fen / 60 + miao / 60 / 60 ;  
  83.         return duStr.toString();  
  84.     }  
  85.      
  86.     public static void main(String[] args)  
  87.     {  
  88.         ImgInfoBean imgInfoBean = new SampleUsage().parseImgInfo("C:\\DSC_4564.JPG");  
  89.         System.out.println(imgInfoBean.toString());  
  90.     }  
  91. }  

 

 

文件信息bean类。

  1. package com.drew.metadata;  
  2.   
  3. public class ImgInfoBean {  
  4.   
  5.     private String imgHeight ;//图片高度  
  6.     private String imgWidth ;//图片宽度  
  7.     private String dateTime ;//拍摄时间  
  8.     private String altitude ;//海拔  
  9.     private String latitude;//纬度  
  10.     private String longitude ;//经度  
  11.     private Long imgSize;    //文件大小  
  12.     private String imgName;  //文件名称  
  13.     public Long getImgSize() {  
  14.         return imgSize;  
  15.     }  
  16.     public void setImgSize(Long imgSize) {  
  17.         this.imgSize = imgSize;  
  18.     }  
  19.     public String getImgName() {  
  20.         return imgName;  
  21.     }  
  22.     public void setImgName(String imgName) {  
  23.         this.imgName = imgName;  
  24.     }  
  25.     public String getImgHeight() {  
  26.         return imgHeight;  
  27.     }  
  28.     public void setImgHeight(String imgHeight) {  
  29.         this.imgHeight = imgHeight;  
  30.     }  
  31.     public String getImgWidth() {  
  32.         return imgWidth;  
  33.     }  
  34.     public void setImgWidth(String imgWidth) {  
  35.         this.imgWidth = imgWidth;  
  36.     }  
  37.     public String getDateTime() {  
  38.         return dateTime;  
  39.     }  
  40.     public void setDateTime(String dateTime) {  
  41.         this.dateTime = dateTime;  
  42.     }  
  43.     public String getAltitude() {  
  44.         return altitude;  
  45.     }  
  46.     public void setAltitude(String altitude) {  
  47.         this.altitude = altitude;  
  48.     }  
  49.     public String getLatitude() {  
  50.         return latitude;  
  51.     }  
  52.     public void setLatitude(String latitude) {  
  53.         this.latitude = latitude;  
  54.     }  
  55.     public String getLongitude() {  
  56.         return longitude;  
  57.     }  
  58.     public void setLongitude(String longitude) {  
  59.         this.longitude = longitude;  
  60.     }  
  61.       
  62.     public String toString (){  
  63.         return "[图片信息]文件名称:"this.imgName+"   文件大小:"+this.imgSize +"  高度:"+this.imgHeight+"  宽度:"+this.imgWidth+"  拍摄时间:"+this.dateTime+"  海拔:"+this.altitude+"   纬度:"+this.latitude+"  经度:"+this.longitude;  
  64.     }  
  65. }  


通过以上代码就能得到图片中的exif信息。

2
4
分享到:
评论

相关推荐

    JAVA读取照片信息 exif

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

    java读取图片exif信息

    Java社区中广泛使用的开源库是Apache Commons Imaging(以前称为Apache Sanselan),它提供了对多种图像格式的读写支持,包括EXIF数据。要使用这个库,你需要将其添加到你的项目依赖中。如果你使用的是Maven,可以在...

    java处理EXIF信息方法

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

    java获取图片的EXIF信息

    在Java编程语言中,获取图片的EXIF(Exchangeable Image File Format)信息是一项常见的任务,尤其是在处理图像数据或开发图像处理应用时。EXIF信息包含了拍摄照片时的各种元数据,如相机型号、拍摄时间、曝光参数、...

    EXIF读写123

    1. 读取原始信息:首先,读取JPEG文件的EXIF部分,复制到内存中。 2. 修改信息:找到要修改的标签,更新其对应的值。 3. 重新写入:将修改后的EXIF信息写回JPEG文件,替换原有的EXIF数据,同时保持文件其余部分不变...

    Java读取图片EXIF信息的方法

    以下是对Java读取图片EXIF信息的详细分析: 1. **EXIF信息概述**: - EXIF是专门为数码相机照片设计的一种元数据格式,用于存储拍摄时的相机设置和环境信息。 - 主要信息包括:相机品牌和型号、拍摄时间、光圈...

    Java图片压缩(带EXIF信息)

    综上所述,Java结合Apache Commons Imaging库可以实现对图片的EXIF信息读取和保存,通过调整JPEG压缩质量实现图片压缩,并利用Java 2D API轻松添加边框。这些技术在实际项目中非常实用,帮助开发者处理和优化图片...

    PhotoEXIF:通过Java读取和写入照片的EXIF

    这个项目根据网上各位大牛的博客、讨论而来,主要是解决网上很多人碰到的使用JAVA修改照片的EXIF信息的问题——mediautil.image.jpeg.JPEG cannot be cast to mediautil.image.jpeg.Exif 。EXIF是 Exchangeable ...

    修改图片exif信息示例(使用MediaUtil)

    此外,MediaUtil 还支持 EXIF 元数据的读写功能,这使得开发者能够轻松地修改图像文件中的元数据信息。 #### 三、准备工作 在开始编写代码之前,需要确保已经正确安装了 MediaUtil 库,并且将其添加到项目的 ...

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

    这些信息同样存储在Exif中,通过`IIOMetadata`对象的`getAsTree(String formatName)`方法获取XML格式的元数据树,再通过XPath查询来提取具体信息。 核心知识点四:处理地理坐标 GPS信息通常以十进制或度分秒的形式...

    java读取metadata元信息

    在Java编程中,元数据(Metadata)是指关于数据的数据,它提供有关文件、数据库记录、类、方法等的附加信息,但不直接构成这些实体的实际内容。元数据可以帮助理解和处理这些对象,例如,图片的元数据可能包含拍摄...

    Andriod下读取图片Exif信息Demo

    在本教程中,我们将深入探讨如何在Android应用程序中读取和使用这些Exif信息。 首先,要读取Exif信息,我们需要使用Android提供的`ExifInterface`类。这个类可以从Android API Level 5(Android 2.1,Eclair)开始...

    获取照片的Exif信息

    Exif(Exchangeable Image File Format)是一种用于存储数码照片元数据的标准格式,它在JPEG、TIFF以及其他图像文件中广泛使用。Exif信息通常包含了拍摄照片时的各种详细参数,如拍摄日期和时间、相机型号、曝光时间...

    读取数码照片EXIF信息源码

    首先,我们要知道读取EXIF信息需要用到特定的库或API,例如Java中的ImageIO,Python中的PIL(Pillow),或者是C++中的libexif等。在Delphi编程环境中,"Exif.pas"文件可能是一个实现读取EXIF信息的单元,包含了必要...

    exif.rar_android_android exif_exif_exif java

    总的来说,"exif.rar"提供的资源是一个自定义的Android Java库,用于读取和操作JPEG图像的Exif信息。通过深入理解和使用这个库,开发者可以更好地控制和利用图像的元数据,为应用程序增加丰富的功能,如图片编辑、...

    Java修改图片元数据Exif信息

    在Java中,可以借助像`Apache Commons Imaging`(以前称为`Commons Sanselan`)或者`metadata-extractor`这样的库来读取和修改Exif信息。这些库提供了方便的API,让我们能够轻松地访问和修改图片的Exif标签。 `...

    关于Java 如何采用 metadata-extractor 读取数码相机 Exif 数据信息的代码.pdf

    在Java中,我们可以使用metadata-extractor库来读取数码相机的Exif数据信息。metadata-extractor是一个开源的Java库,它能从各种图像和视频文件中提取元数据,包括Exif、IPTC、XMP等信息。这个库非常实用,可以帮助...

    Java读取照片地址完整项目【附测试照片一张】.zip

    总的来说,这个Java项目提供了一个全面的示例,教导开发者如何深入挖掘和利用数字照片中的元数据,对于学习Java图像处理和理解EXIF信息具有很高的实践价值。通过学习和实践这个项目,开发者将能够熟练地在自己的应用...

    获取图片Exif信息

    在Java中,可以使用`Apache Commons Imaging`库,而在JavaScript中,有`exif-js`库用于浏览器环境下的Exif信息读取。 除了编程方式,还有一些图形用户界面工具可以直接查看Exif信息,如Windows的"属性"对话框(选择...

Global site tag (gtag.js) - Google Analytics