照片EXIF資訊的讀取和改寫的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資訊的。
<span style="font-size:14px;">public static void main(String[] args) throws Exception { File jpegFile = new File("D://nozip//4.jpg"); Metadata metadata = JpegMetadataReader.readMetadata(jpegFile); Directory exif = metadata.getDirectory(ExifDirectory.class);//這裡要稍微注意下 Iterator tags = exif.getTagIterator(); while (tags.hasNext()) { Tag tag = (Tag)tags.next(); System.out.println(tag); } } </span>
上面寫的稍微注意的地方是要注意ExifDirectory.class,因為ExifDirectory只是EXIF中大部分的引數,但是並不是所有的引數。比如要檢視GPS的資訊則需要GpsDirectory,而它和ExifDirectory都是繼承自Directory。同樣繼承自Directory還有好幾個,就看你需要的情況了。順便貼下它的API。
再下面是寫EXIF資訊的。
<span style="font-size:14px;"> /** * 將照片中的資訊進行重寫 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //原檔案 InputStream fip = new BufferedInputStream(new FileInputStream("D://nozip//2.jpg")); // No need to buffer LLJTran llj = new LLJTran(fip); try { llj.read(LLJTran.READ_INFO, true); } catch (LLJTranException e) { e.printStackTrace(); } Exif exif = (Exif) llj.getImageInfo(); /* Set some values directly to gps IFD */ Entry e; // Set Latitude e = new Entry(Exif.ASCII); e.setValue(0, 'N'); exif.setTagValue(Exif.GPSLatitudeRef,-1, e, true); //設定具體的精度 e = new Entry(Exif.RATIONAL); e.setValue(0, new Rational(31, 1)); e.setValue(1, new Rational(21, 1)); e.setValue(2, new Rational(323, 1)); exif.setTagValue(Exif.GPSLatitude,-1, e, true); // Set Longitude e = new Entry(Exif.ASCII); e.setValue(0, 'E'); exif.setTagValue(Exif.GPSLongitudeRef,-1, e, true); //設定具體的緯度 e = new Entry(Exif.RATIONAL); e.setValue(0, new Rational(120, 1)); e.setValue(1, new Rational(58, 1)); e.setValue(2, new Rational(531, 1)); exif.setTagValue(Exif.GPSLongitude,-1, e, true); llj.refreshAppx(); // Recreate Marker Data for changes done //改寫後的檔案,檔案必須存在 OutputStream out = new BufferedOutputStream(new FileOutputStream("D://nozip//1.jpg")); // Transfer remaining of image to output with new header. llj.xferInfo(null, out, LLJTran.REPLACE, LLJTran.REPLACE); fip.close(); out.close(); llj.freeMemory(); } </span>
將圖片中的GPS資訊進行重寫後,再用上面讀GPS的來讀將讀取不到任何資訊,只能在ExifDirectoy裡面才能讀到了,但是都是unkown tag了,很是奇怪。但是,機器等裝置還是可以讀到資訊的。
from: http://www.aiuxian.com/article/p-2976272.html
關注公眾號,分享乾貨,討論技術
相關推薦
照片EXIF資訊的讀取和改寫的JAVA實現
由於專案需要對照片的EXIF資訊進行處理,因此在網上搜索了一番。搗鼓出來了,寫下,總結。需要用到2個jar包,metadata-extractor-2.3.1和mediautil-1.0。這2個jar包比較好找,地址就不寫了,搜尋下就OK。需要注意的是,mediautil-1
Java獲取照片EXIF資訊
今天上傳幾張照片到人人相簿,發現可以看到我相機的資訊,當然很多圖片軟體都能看到,所以搜尋了下Java如何操作,以後備用。 首先介紹一下什麼是EXIF,EXIF是 Exchangeable Image File的縮寫,這是一種專門為數碼相機照片設定的格式。這種格式可
數據庫並行讀取和寫入(Python實現)
ews for rom join() rgs one val connect ssi max_process = 16 #最大進程數 def read_SQL_write(r_host,r_port,r_user,r_passwd,r_db,r_charset,w_host
Android通過Bluetooth藍芽傳送手機照片檔案到Windows PC:Java實現
Android通過Bluetooth藍芽傳送手機照片檔案到Windows PC:Java實現 本文在《Android通過藍芽傳送資料到Windows PC電腦:Java實現(連結地址:https://blog.csdn.net/zhangphil/article/details/831467
Delete Node in a BST 二叉查詢樹的查詢、插入和刪除 - Java實現
https://leetcode.com/problems/delete-node-in-a-bst Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return t
hadoop 二次排序和一個java實現
需要二次排序的原因:mapreduce架構自動對對映器生成的鍵進行排序,即歸約器啟動之前,所有鍵是有序的,但是值是隨機的,二次排序指的是對值進行排序。歸約器輸入形如:,即一個key對應多個值,這些值是無序的,排序後得到有序的值,如下: 其中,S按照升序或者降序排列
spring自動裝配和通過java實現裝配
ati 三方庫 autowired 模式 限定 程序 str primary java實現 1.組建掃描 在類上添加註解@Component註解可以實現組建掃描 @Component public class A{ ... } 2.自動裝配 通過在屬性上或者方
給定一個數組,求出陣列元素的排列和組合——Java實現
1. 思路 組合數C(n,m)和全排列A(n,n)可以通過遞迴的方式,直接實現。 而A(n,m)則可以通過組合數和全排列間接求出A(n,m)=C(n,m)*A(m,m),即對得到的組合數中的每個元素進行全排列 2. Java實現 package com.zfy.test
求最大子序列和(Java實現)
【問題描述】最大子序列和問題:給定整數A1, A2, ..., An(可能有負數),ΣAk的最大值(為方便起見,如果所有整數均為負數,則最大子序列和為0)。 通過四種方式來完成演算法的實現,時間複雜度分別為:O(N*N*N)、O(N*N)、O(N*log N)、O(N) 【
【夜半寫點啥】Hbuilder+exif.js獲取照片exif資訊
【概】我在H5端需要這麼一個功能::本地選擇圖片並獲取exif資訊(主要是建立時間、和地點等),翻了半天Hbuilder文件,沒發現這個api,於是目光轉焦到強大滴exif.js上。step1、引入檔案<script type="text/javascript" src
最大子序列和:Java實現
如果a[i]是負的,那麼它不可能代表最優序列的起點,因為任何包含a[i]作為起點的子序列都可以通過a[i+1]作起點而得到改進。任何負的子序列不可能是最優子序列的字首。時間複雜度O(N)的解法:
分組校驗和的java實現
分組校驗和的演算法用在了很多分組的計算中。現在只針對IP分組而言,IP分組只對IP分組頭進行計算,演算法如下: 1、計算校驗和 1)初始時,將校驗和域都設定為0 2)每16bit做二進位制反碼求和。 3)得到的結果取反便是檢驗和 2、驗證校驗和 1)
iOS獲取照片EXif資訊
方法一:知道照片URL //新建CGImageSourceRef物件 CGImageSourceRef*imageRef= CGImageSourceCreateWithURL((CFURLRef)imageUrl, NULL); //獲取照片資訊 NSDictiona
基於spring-boot和docker-java實現對docker容器的動態管理和監控[附完整原始碼下載]
(我是個封面) docker簡介 Docker 是一個開源的應用容器引擎,和傳統的虛擬機器技術相比,Docker 容器效能開銷極低,因此也廣受開發者喜愛。隨著基於docker的開發者越來越多,docker的映象也原來越豐富,未來各種企業級的完整解決方案都可以直接通過下載映象拿來即用。因此do
java實現json檔案的讀取和解析
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId>
使用Java程式讀取JPG Tif等格式圖片的exif資訊
package com.util; import java.io.File;import java.util.Iterator; import com.drew.imaging.ImageProcessingException;import com.drew.metadata.Directory;impo
Java實現在文字檔案中寫入資料和讀取資料
Java實現在文字檔案中寫入資料和讀取資料 寫資料到文字檔案中去: 程式碼如下所示: import java.io.File; import java.io.FileWriter; import java.io.IOException; public class
java nio 實現檔案的讀取和輸出
1、讀取檔案流 File f= new File("**"); FileInputStream in=new FileInputStream(f); //獲取輸入管道 FileChannel inChannel=in.getChannel()
用java實現對MySql資料庫中資料的讀取、插入、修改和刪除
目標: 1、實現eclipse同資料庫的連線 2、在eclipse中用java實現對資料庫的控制 初學java和資料庫,本文是參考這篇文章的思路的學習筆記,程式碼實現了將4個控制函式(讀取、插入、修改和刪除)分別寫成4個靜態方法呼叫。 1. 關於java和MySQL的連
讀取照片的Exif資訊
下面兩篇文章介紹Exif 下面是第一篇 一幅圖片除了包含我們能看見的畫素資訊,背後還包含了拍攝時間,光圈大小,曝光等資訊。UIImage類將這些細節資訊都隱藏了起來,只提供我們關心的圖片尺寸,圖片方向等。我們可以通過imageIO框架獲取到圖片背後的所有資訊,下面就