欢迎大家访问我的个人网站 萌萌的IT人
一般的相机会记录一些图片基本信息之外的扩展信息,例如,经纬度信息,存储与exif中,如下图!
一般情况下是java程序读取不到gps等扩展信息的。如果想要解析到里面的信息需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址:http://code.google.com/p/metadata-extractor/),这个jar提供了支持获取扩展信息的功能。
具体实现的代码如下:
- package com.drew.metadata;
- import java.io.File;
- import java.io.IOException;
- import com.drew.imaging.ImageMetadataReader;
- import com.drew.imaging.ImageProcessingException;
- public class SampleUsage
- {
- /**
- * 图片信息获取metadata元数据信息
- * @param fileName 需要解析的文件
- * @return
- */
- public ImgInfoBean parseImgInfo (String fileName)
- {
- File file = new File(fileName);
- ImgInfoBean imgInfoBean = null;
- try {
- Metadata metadata = ImageMetadataReader.readMetadata(file);
- imgInfoBean = printImageTags(file, metadata);
- } catch (ImageProcessingException e) {
- System.err.println("error 1a: " + e);
- } catch (IOException e) {
- System.err.println("error 1b: " + e);
- }
- return imgInfoBean;
- }
- /**
- * 读取metadata里面的信息
- * @param sourceFile 源文件
- * @param metadata metadata元数据信息
- * @return
- */
- private ImgInfoBean printImageTags(File sourceFile, Metadata metadata)
- {
- ImgInfoBean imgInfoBean = new ImgInfoBean ();
- imgInfoBean.setImgSize(sourceFile.getTotalSpace());
- imgInfoBean.setImgName(sourceFile.getName());
- for (Directory directory : metadata.getDirectories()) {
- for (Tag tag : directory.getTags()) {
- String tagName = tag.getTagName();
- String desc = tag.getDescription();
- if (tagName.equals("Image Height")) {
- //图片高度
- imgInfoBean.setImgHeight(desc);
- } else if (tagName.equals("Image Width")) {
- //图片宽度
- imgInfoBean.setImgWidth(desc);
- } else if (tagName.equals("Date/Time Original")) {
- //拍摄时间
- imgInfoBean.setDateTime(desc);
- } else if (tagName.equals("GPS Altitude")) {
- //海拔
- imgInfoBean.setAltitude(desc);
- } else if (tagName.equals("GPS Latitude")) {
- //纬度
- imgInfoBean.setLatitude(pointToLatlong(desc));
- } else if (tagName.equals("GPS Longitude")) {
- //经度
- imgInfoBean.setLongitude(pointToLatlong(desc));
- }
- }
- for (String error : directory.getErrors()){
- System.err.println("ERROR: " + error);
- }
- }
- return imgInfoBean;
- }
- /**
- * 经纬度转换 度分秒转换
- * @param point 坐标点
- * @return
- */
- public String pointToLatlong (String point ) {
- Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim());
- Double fen = Double.parseDouble(point.substring(point.indexOf("°")+1, point.indexOf("'")).trim());
- Double miao = Double.parseDouble(point.substring(point.indexOf("'")+1, point.indexOf("\"")).trim());
- Double duStr = du + fen / 60 + miao / 60 / 60 ;
- return duStr.toString();
- }
- public static void main(String[] args)
- {
- ImgInfoBean imgInfoBean = new SampleUsage().parseImgInfo("C:\\DSC_4564.JPG");
- System.out.println(imgInfoBean.toString());
- }
- }
文件信息bean类。
- package com.drew.metadata;
- public class ImgInfoBean {
- private String imgHeight ;//图片高度
- private String imgWidth ;//图片宽度
- private String dateTime ;//拍摄时间
- private String altitude ;//海拔
- private String latitude;//纬度
- private String longitude ;//经度
- private Long imgSize; //文件大小
- private String imgName; //文件名称
- public Long getImgSize() {
- return imgSize;
- }
- public void setImgSize(Long imgSize) {
- this.imgSize = imgSize;
- }
- public String getImgName() {
- return imgName;
- }
- public void setImgName(String imgName) {
- this.imgName = imgName;
- }
- public String getImgHeight() {
- return imgHeight;
- }
- public void setImgHeight(String imgHeight) {
- this.imgHeight = imgHeight;
- }
- public String getImgWidth() {
- return imgWidth;
- }
- public void setImgWidth(String imgWidth) {
- this.imgWidth = imgWidth;
- }
- public String getDateTime() {
- return dateTime;
- }
- public void setDateTime(String dateTime) {
- this.dateTime = dateTime;
- }
- public String getAltitude() {
- return altitude;
- }
- public void setAltitude(String altitude) {
- this.altitude = altitude;
- }
- public String getLatitude() {
- return latitude;
- }
- public void setLatitude(String latitude) {
- this.latitude = latitude;
- }
- public String getLongitude() {
- return longitude;
- }
- public void setLongitude(String longitude) {
- this.longitude = longitude;
- }
- public String toString (){
- return "[图片信息]文件名称:"+ this.imgName+" 文件大小:"+this.imgSize +" 高度:"+this.imgHeight+" 宽度:"+this.imgWidth+" 拍摄时间:"+this.dateTime+" 海拔:"+this.altitude+" 纬度:"+this.latitude+" 经度:"+this.longitude;
- }
- }
通过以上代码就能得到图片中的exif信息。
相关推荐
在Java编程中,读取照片信息,特别是Exif(Exchangeable Image File Format)元数据,是一种常见的需求。Exif信息通常包含拍摄日期、时间、地理位置、相机型号、曝光参数等重要数据,对于图像处理和分析非常有用。在...
Java社区中广泛使用的开源库是Apache Commons Imaging(以前称为Apache Sanselan),它提供了对多种图像格式的读写支持,包括EXIF数据。要使用这个库,你需要将其添加到你的项目依赖中。如果你使用的是Maven,可以在...
通过以上步骤,我们可以使用Java有效地处理和分析图像文件中的EXIF信息,特别是与GPS相关的数据。这在地理标记、照片管理和图像分析等场景中非常有用。然而,处理这类数据时,务必遵循隐私保护法规,尊重用户的隐私...
在Java编程语言中,获取图片的EXIF(Exchangeable Image File Format)信息是一项常见的任务,尤其是在处理图像数据或开发图像处理应用时。EXIF信息包含了拍摄照片时的各种元数据,如相机型号、拍摄时间、曝光参数、...
1. 读取原始信息:首先,读取JPEG文件的EXIF部分,复制到内存中。 2. 修改信息:找到要修改的标签,更新其对应的值。 3. 重新写入:将修改后的EXIF信息写回JPEG文件,替换原有的EXIF数据,同时保持文件其余部分不变...
以下是对Java读取图片EXIF信息的详细分析: 1. **EXIF信息概述**: - EXIF是专门为数码相机照片设计的一种元数据格式,用于存储拍摄时的相机设置和环境信息。 - 主要信息包括:相机品牌和型号、拍摄时间、光圈...
综上所述,Java结合Apache Commons Imaging库可以实现对图片的EXIF信息读取和保存,通过调整JPEG压缩质量实现图片压缩,并利用Java 2D API轻松添加边框。这些技术在实际项目中非常实用,帮助开发者处理和优化图片...
这个项目根据网上各位大牛的博客、讨论而来,主要是解决网上很多人碰到的使用JAVA修改照片的EXIF信息的问题——mediautil.image.jpeg.JPEG cannot be cast to mediautil.image.jpeg.Exif 。EXIF是 Exchangeable ...
此外,MediaUtil 还支持 EXIF 元数据的读写功能,这使得开发者能够轻松地修改图像文件中的元数据信息。 #### 三、准备工作 在开始编写代码之前,需要确保已经正确安装了 MediaUtil 库,并且将其添加到项目的 ...
这些信息同样存储在Exif中,通过`IIOMetadata`对象的`getAsTree(String formatName)`方法获取XML格式的元数据树,再通过XPath查询来提取具体信息。 核心知识点四:处理地理坐标 GPS信息通常以十进制或度分秒的形式...
在Java编程中,元数据(Metadata)是指关于数据的数据,它提供有关文件、数据库记录、类、方法等的附加信息,但不直接构成这些实体的实际内容。元数据可以帮助理解和处理这些对象,例如,图片的元数据可能包含拍摄...
在本教程中,我们将深入探讨如何在Android应用程序中读取和使用这些Exif信息。 首先,要读取Exif信息,我们需要使用Android提供的`ExifInterface`类。这个类可以从Android API Level 5(Android 2.1,Eclair)开始...
Exif(Exchangeable Image File Format)是一种用于存储数码照片元数据的标准格式,它在JPEG、TIFF以及其他图像文件中广泛使用。Exif信息通常包含了拍摄照片时的各种详细参数,如拍摄日期和时间、相机型号、曝光时间...
首先,我们要知道读取EXIF信息需要用到特定的库或API,例如Java中的ImageIO,Python中的PIL(Pillow),或者是C++中的libexif等。在Delphi编程环境中,"Exif.pas"文件可能是一个实现读取EXIF信息的单元,包含了必要...
总的来说,"exif.rar"提供的资源是一个自定义的Android Java库,用于读取和操作JPEG图像的Exif信息。通过深入理解和使用这个库,开发者可以更好地控制和利用图像的元数据,为应用程序增加丰富的功能,如图片编辑、...
在Java中,可以借助像`Apache Commons Imaging`(以前称为`Commons Sanselan`)或者`metadata-extractor`这样的库来读取和修改Exif信息。这些库提供了方便的API,让我们能够轻松地访问和修改图片的Exif标签。 `...
在Java中,我们可以使用metadata-extractor库来读取数码相机的Exif数据信息。metadata-extractor是一个开源的Java库,它能从各种图像和视频文件中提取元数据,包括Exif、IPTC、XMP等信息。这个库非常实用,可以帮助...
总的来说,这个Java项目提供了一个全面的示例,教导开发者如何深入挖掘和利用数字照片中的元数据,对于学习Java图像处理和理解EXIF信息具有很高的实践价值。通过学习和实践这个项目,开发者将能够熟练地在自己的应用...
在Java中,可以使用`Apache Commons Imaging`库,而在JavaScript中,有`exif-js`库用于浏览器环境下的Exif信息读取。 除了编程方式,还有一些图形用户界面工具可以直接查看Exif信息,如Windows的"属性"对话框(选择...