1. 程式人生 > >java讀取JPEG中exif中資訊

java讀取JPEG中exif中資訊

一般的相機會記錄一些圖片基本資訊之外的擴充套件資訊,例如,經緯度資訊,儲存與exif中,如下圖!

一般情況下是java程式讀取不到gps等擴充套件資訊的。如果想要解析到裡面的資訊需要下載一個jar包,metadata-extractor-2.6.4.jar(下載地址:http://code.google.com/p/metadata-extractor/),這個jar提供了支援獲取擴充套件資訊的功能。

具體實現的程式碼如下:

[java] view plaincopyprint?
  1. package com.drew.metadata;  
  2. import java.io.File;  
  3. import
     java.io.IOException;  
  4. import com.drew.imaging.ImageMetadataReader;  
  5. import com.drew.imaging.ImageProcessingException;  
  6. publicclass SampleUsage  
  7. {  
  8.    /** 
  9.     * 圖片資訊獲取metadata元資料資訊 
  10.     * @param fileName 需要解析的檔案 
  11.     * @return 
  12.     */
  13.     public ImgInfoBean parseImgInfo (String fileName)  
  14.     {  
  15.         File file = new File(fileName);  
  16.         ImgInfoBean imgInfoBean = null;  
  17.         try {  
  18.             Metadata metadata = ImageMetadataReader.readMetadata(file);  
  19.             imgInfoBean = printImageTags(file, metadata);  
  20.         } catch (ImageProcessingException e) {  
  21.             System.err.println("error 1a: "
     + e);  
  22.         } catch (IOException e) {  
  23.             System.err.println("error 1b: " + e);  
  24.         }  
  25.         return imgInfoBean;  
  26.     }  
  27.     /** 
  28.      * 讀取metadata裡面的資訊 
  29.      * @param sourceFile 原始檔 
  30.      * @param metadata metadata元資料資訊 
  31.      * @return 
  32.      */
  33.     private ImgInfoBean printImageTags(File sourceFile, Metadata metadata)  
  34.     {  
  35.         ImgInfoBean imgInfoBean = new ImgInfoBean ();  
  36.         imgInfoBean.setImgSize(sourceFile.getTotalSpace());  
  37.         imgInfoBean.setImgName(sourceFile.getName());  
  38.         for (Directory directory : metadata.getDirectories()) {  
  39.             for (Tag tag : directory.getTags()) {  
  40.                 String tagName = tag.getTagName();  
  41.                 String desc = tag.getDescription();  
  42.                 if (tagName.equals("Image Height")) {  
  43.                     //圖片高度
  44.                     imgInfoBean.setImgHeight(desc);  
  45.                 } elseif (tagName.equals("Image Width")) {  
  46.                     //圖片寬度
  47.                     imgInfoBean.setImgWidth(desc);  
  48.                 } elseif (tagName.equals("Date/Time Original")) {  
  49.                     //拍攝時間
  50.                     imgInfoBean.setDateTime(desc);  
  51.                 } elseif (tagName.equals("GPS Altitude")) {  
  52.                     //海拔
  53.                     imgInfoBean.setAltitude(desc);  
  54.                 } elseif (tagName.equals("GPS Latitude")) {  
  55.                     //緯度
  56.                     imgInfoBean.setLatitude(pointToLatlong(desc));  
  57.                 } elseif (tagName.equals("GPS Longitude")) {  
  58.                     //經度
  59.                     imgInfoBean.setLongitude(pointToLatlong(desc));  
  60.                 }  
  61.             }  
  62.             for (String error : directory.getErrors()){  
  63.                 System.err.println("ERROR: " + error);  
  64.             }  
  65.         }  
  66.         return imgInfoBean;  
  67.     }  
  68.     /** 
  69.      * 經緯度轉換  度分秒轉換 
  70.      * @param point 座標點 
  71.      * @return 
  72.      */
  73.     public String pointToLatlong (String point ) {  
  74.         Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim());  
  75.         Double fen = Double.parseDouble(point.substring(point.indexOf("°")+1, point.indexOf("'")).trim());  
  76.         Double miao = Double.parseDouble(point.substring(point.indexOf("'")+1, point.indexOf("\"")).trim());  
  77.         Double duStr = du + fen / 60 + miao / 60 / 60 ;  
  78.         return duStr.toString();  
  79.     }  
  80.     publicstaticvoid main(String[] args)  
  81.     {  
  82.         ImgInfoBean imgInfoBean = new SampleUsage().parseImgInfo("C:\\DSC_4564.JPG");  
  83.         System.out.println(imgInfoBean.toString());  
  84.     }  
  85. }  

檔案資訊bean類。

[java] view plaincopyprint?
  1. package com.drew.metadata;  
  2. publicclass ImgInfoBean {  
  3.     private String imgHeight ;//圖片高度
  4.     private String imgWidth ;//圖片寬度
  5.     private String dateTime ;//拍攝時間
  6.     private String altitude ;//海拔
  7.     private String latitude;//緯度
  8.     private String longitude ;//經度
  9.     private Long imgSize;    //檔案大小
  10.     private String imgName;  //檔名稱
  11.     public Long getImgSize() {  
  12.         return imgSize;  
  13.     }  
  14.     publicvoid setImgSize(Long imgSize) {  
  15.         this.imgSize = imgSize;  
  16.     }  
  17.     public String getImgName() {  
  18.         return imgName;  
  19.     }  
  20.     publicvoid setImgName(String imgName) {  
  21.         this.imgName = imgName;  
  22.     }  
  23.     public String getImgHeight() {  
  24.         return imgHeight;  
  25.     }  
  26.     publicvoid setImgHeight(String imgHeight) {  
  27.         this.imgHeight = imgHeight;  
  28.     }  
  29.     public String getImgWidth() {  
  30.         return imgWidth;  
  31.     }  
  32.     publicvoid setImgWidth(String imgWidth) {  
  33.         this.imgWidth = imgWidth;  
  34.     }  
  35.     public String getDateTime() {  
  36.         return dateTime;  
  37.     }  
  38.     publicvoid setDateTime(String dateTime) {  
  39.         this.dateTime = dateTime;  
  40.     }  
  41.     public String getAltitude() {  
  42.         return altitude;  
  43.     }  
  44.     publicvoid setAltitude(String altitude) {  
  45.         this.altitude = altitude;  
  46.     }  
  47.     public String getLatitude() {  
  48.         return latitude;  
  49.     }  
  50.     publicvoid setLatitude(String latitude) {  
  51.         this.latitude = latitude;  
  52.     }  
  53.     public String getLongitude() {  
  54.         return longitude;  
  55.     }  
  56.     publicvoid setLongitude(String longitude) {  
  57.         this.longitude = longitude;  
  58.     }  
  59.     public String toString (){  
  60.         return"[圖片資訊]檔名稱:"this.imgName+"   檔案大小:"+this

    相關推薦

    java讀取JPEGexif資訊

    一般的相機會記錄一些圖片基本資訊之外的擴充套件資訊,例如,經緯度資訊,儲存與exif中,如下圖! 一般情況下是java程式讀取不到gps等擴充套件資訊的。如果想要解析到裡面的資訊需要下載一個jar包,metadata-extractor-2.6.4.jar(下載地址:http://code.google.

    Java讀取並匯出Word的表格(Excel),匯出檔案為Excel

    看公司的同事很費勁的在一條一條地從Word中的表格複製貼上到Excel, 我從網上找個兩個demo給合在了一起,幫他解決了問題。最下方有原始碼。 一個兩個類 第一個: package com.wbs.test; import java.io.FileInputStream

    java讀取txt目標檔案的資料列印到控制檯

    package demo2; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; impor

    Java 讀取Word文字框的文字/圖片/表格

    Word可插入文字框,文字框中可嵌入文字、圖片、表格等內容。對文件中的已有文字框,也可以讀取其中的內容。本文以Java程式程式碼來展示如何讀取文字框,包括讀取文字框中的文字、圖片以及表格等。 【程式環境】 程式編輯環境為IntelliJ IDEA,並在程式中引入了free Spire.Doc.jar,安裝的J

    JPEG影象EXIF資料資訊的解析

    剛剛結束本科生活的我,那會還比較頹廢,但是因為讀研,導致寶寶七月初就到了學校,來了以後也不知道該做什麼,就出去浪呀~哈哈,不料來了不久後接到老師的任務,讓寶寶把JPEG影象的EXIF資訊解讀出來,當時內心OS大抵是:什麼?老師說了什麼?當時對於EXIF完全陌生,沒有一點概念,寶寶在百度之後,也是比較

    java 讀取圖片的 Exif 資料

    包的下載地址: package com.imgread; import com.drew.metadata.*;import com.drew.metadata.exif.*;import com.drew.imaging.jpeg.JpegProcessingExcep

    java:通過javadoc API讀取java原始碼的註釋資訊(comment)

    如何從java原始碼中讀取註釋資訊?(注意不是指通過反射讀取annotation類,是comment,就是程式設計師在原始碼中加的註釋) 比如: /** * 使用當前類的class loader載入工具物件 * @param

    java後臺讀取配置文件key與value -----demo

    undle ltm string 文件名 logs 配置 rip conf 返回值 public class ResourcesUtils { /* * @description:根據屬性獲取文件名 * * @param:propertyName文件的

    java讀取Excel表格的數據

    bubuko str 需求 equal read sta alt 表格 nbsp 1、需求 用java代碼讀取hello.xls表格中的數據 2、hello.xls表格 3、java代碼 package com.test; import java.io.File;

    scala/java讀取項目的文件

    AC lin tin inf alt 位置 -cp 分號 res 一、獲取jar包的位置 1.使用類路徑 String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().

    springBoot 讀取配置檔案yml資訊

    yml中自定義一些變數 var: analyze_url: test ocr_url: test microsoft_key: test 對映到類變數中 @Getter @Component public class varModel { @Value("${var.

    java讀取excel檔案內容,並將讀取到的內容寫入到另一檔案

    需要匯入的jar包下載地址https://pan.baidu.com/s/16cTpUfx0KvKkbGYkXAUKMA 程式碼:ReadExcel.java //信1605-3 20163432 張運濤 package domain; import java.io.File; im

    java讀取excel文件內容,並將讀取到的內容寫入到另一文件

    dom tst trace 一個 讀取excel domain ble write 做出 需要導入的jar包下載地址https://pan.baidu.com/s/16cTpUfx0KvKkbGYkXAUKMA 代碼:ReadExcel.java //信1605-3 2

    Java架構-SOAspringmvcrestful服務動態重新整理token資訊

    因為要考慮服務端token的動態重新整理,而且還要單獨啟動定時排程任務去重新整理token資訊,保證token的時效及安全問題,直接分享動態重新整理token的程式碼: Java程式碼 我這邊會將近期研發的spring cloud微服務雲架構的搭建過程和精髓記

    【轉】java輸出異常資訊

    做java開發的時候,經常會遇到程式碼拋異常後,需要把異常資訊儲存到資料庫或者上傳到雲伺服器做cache分析。這時候就需要獲取異常的堆疊資訊(詳細錯誤資訊)。 有的人用e.getMessage()來獲取異常資訊,但是這樣獲取到的資訊內容並不全,而且有時候為空。我們可以用下面方法來獲取。 

    java 上傳圖片至本地 並讀取圖片在網頁顯示

    java 上傳圖片至本地 並讀取圖片在網頁中顯示 程式碼+圖片如下所示 一、程式碼 @Controller public class ImageController { private static Logger logger = LoggerFactory.getLogge

    java 讀取jar包的檔案

    參考: https://blog.csdn.net/rchm8519/article/details/39557499 參考: https://www.cnblogs.com/zeciiii/p/4178824.html  需求: 我自己寫了一個Java 的記事本工具,然後實現

    java讀取專案src/main/resources 資原始檔夾下的路徑

    今天在開發的時候遇到了一個問題,手動寫一個連結到redis,然後本來用的是springboot 自動讀取的src/main/resources下的application.yml檔案,所以就想直接也去讀取裡面的redis的ip的值(這兒是手動寫一個連線到redis,為什麼不用s

    Java 讀取字串字元的個數

    以“aaabbbccsdlfhhk”為例 要求輸出樣式為a(3)b(3)… import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public class Demo

    Java Servlet實現檔案上傳並讀取Zip壓縮包檔案的真實型別

    1.上傳檔案servlet PS: 使用ant.jar中的 org.apache.tools.zip.ZipEntry 物件,防止亂碼 package com.chenl.servlets; import java.io.File; import java.io.IOExcep