java读取JPEG中exif中信息
来源:互联网 发布:python format函数 编辑:程序博客网 时间:2024/05/21 17:06
一般的相机会记录一些图片基本信息之外的扩展信息,例如,经纬度信息,存储与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读取JPEG中exif中信息
- Java 读取 JPEG 文件的 exif 信息
- C#读取JPEG Exif 信息
- 从EXIF JPEG图片中提取GPS位置信息
- JAVA获取JPEG文件Exif相关信息
- Java读取图片EXIF信息
- java读取图片exif信息
- JPEG: Exif信息相关
- Jpeg图片属性读取EXIF
- jpeg图片的exif信息
- 读取数码照片Exif信息
- 读取和修改JPEG图片文件的头信息EXIF和JFIF
- 提取JPEG图片中的EXIF信息
- C++ 阅读JPEG格式中的EXIF信息
- JPEG图像EXIF数据信息的解析
- 照片EXIF信息的读取和改写的JAVA实现
- 照片EXIF信息的读取和改写的JAVA实现
- C#读取图片Exif信息
- commons-logging和Log4j 日志管理
- java多线程总结
- 深入浅出变长结构体
- SSH
- Java初学(四)——J2SE之面向对象编程3(继承)
- java读取JPEG中exif中信息
- 二分匹配HK算法
- 一个Kettle异常的解决方式
- 华为机试—鉴定回文数—较少code
- ios7 StatusBar
- V8编程入门
- Flex工程编译慢的优化方案
- 关于函数snprintf的缺陷探讨
- “https://18.0.6.200/svn/xxx”: SSL handshake failed 错误解决