我已經設法使用ExifInterface
從我的手機上的JPEG中讀取EXIF標記/屬性(元數據),並且我顯然也可以使用設置屬性和保存屬性。奇怪的是,如果我設置了+保存在圖像文件上,我的應用程序就可以獲取該屬性並顯示它。我還可以在另一個應用程序(Google Play上的照片編輯器)中驗證是否確實寫入了EXIF數據。在Android中將EXIF標記(屬性)寫入並保存爲JPEG圖像
ExifInterface exif = new ExifInterface(path_to_image);
String x = exif.getAttribute("UserComment"); // here, x is always null...
exif.setAttribute("UserComment", "testtest");
exif.saveAttributes();
x = exif.getAttribute("UserComment"); // x = "testtest"
現在,EXIF被保存到JPEG文件:see screenshot of my app。 這也通過照片編輯器應用驗證:see screenshot of that。
但是,如果我註釋掉集+保存只是得到(相同的圖像上方),我的應用程序無法獲取/看屬性:
ExifInterface exif = new ExifInterface(path_to_image);
String x = exif.getAttribute("UserComment"); // x = null (although we know it isn't)
所以:因爲照片編輯器應用程序可以讀取數據,我做錯了什麼(用寫/保存)。另外,如果我重新運行設置+保存在同一個圖像文件上,我的應用程序將複製相同的標記!除了簡單的設置+保存,還有什麼比這個更重要嗎?
更新:看來問題是依賴於設備。儘管
UserComment
似乎不是ExifInterface明確支持的標記之一,但某些設備仍然可以設置標籤中的值並獲取其值。它適用於Nexus,但不適用於Sony Xperia。請看看我的代碼用於獲取(查詢),並設定(更新)UserComment
標籤in my other post on Content Providers.
上有沒有源代碼的一些研究(Java和C),似乎這種行爲不應該是可能的。你的完整源代碼是什麼樣的?我已經在發佈位中丟失了一個try catch塊。 –