JPEG图片扩展信息读取与改动
近日項目中須要用到往jpg圖片中寫入信息(非水印),經調研發現Android中已經封裝了讀寫jpg圖片擴展信息的api(ExifInterface)。
相應api地址:http://developer.android.com/reference/android/media/ExifInterface.html
讀寫均是鍵值對的方式,須要注意的是值的類型須要嚴格依照api定義格式。
支持讀寫節點為:
1.TAG_APERTURE:光圈
2.TAG_DATETIME:日期時間
類型:String,格式為:“yyyy-MM-dd HH:mm:ss”
3.TAG_EXPOSURE_TIME:曝光時刻
4.TAG_FLASH:是否開啟閃光燈
5.TAG_FOCAL_LENGTH:焦距
6.TAG_GPS_ALTITUDE:高度
官方釋義:The altitude (in meters) based on the reference in TAG_GPS_ALTITUDE_REF. Type is rational.
官方解釋類型為有理數。個人理解應為double類型的正數(正整數和正分數)。
7.TAG_GPS_ALTITUDE_REF:高度參考(海平面以上還是海平面下面)
類型:int,0為海平面以上,1為海平面下面。
8.TAG_GPS_DATESTAMP:日期戳
9.TAG_GPS_LATITUDE:緯度
類型:String。格式:Format is "num1/denom1,num2/denom2,num3/denom3".(即度分秒格式),android.location.Location.getLatitude()獲取到的緯度信息須要轉換后才干寫到此節點下,轉換方法在下邊列出。
10. TAG_GPS_LATITUDE_REF:緯度參考(南緯、北緯)
11.TAG_GPS_LONGITUDE:經度
同緯度。
12. TAG_GPS_LONGITUDE:經度參考(東經、西經)
13.TAG_GPS_TIMESTAMP:時間戳
14.TAG_IMAGE_LENGTH:圖片高度
15.TAG_IMAGE_WIDTH:圖片寬度
16.TAG_ISO:曝光度
17.TAG_MAKE:設備制造商
18.TAG_MODEL:設備型號
19.TAG_ORIENTATION:方向
20.TAG_WHITE_BALANCE:白平衡
以寫入與讀取經緯度信息為例介紹Android?ExifInterface讀寫jpg exif信息:
//Gps緯度 double lat = GpsTracking.bestLocation.getLatitude(); //Gps經度 double lon = GpsTracking.bestLocation.getLongitude(); try { //獲取jpg文件 ExifInterface exif = new ExifInterface(filePath + "/" +filename); //寫入緯度信息 exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, gpsInfoConvert(lat)); exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, lat > 0 ?"N" : "S"); //寫入經度信息 exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, gpsInfoConvert(lon)); exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, lon > 0 ?
"E" : "W"); //這句話非常重要,一定要saveAttributes才干使寫入的信息生效。 exif.saveAttributes(); //獲取緯度信息 String latitude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); //獲取經度信息 String longitude = exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); } catch (IOException e) { e.printStackTrace(); }
private String gpsInfoConvert(double gpsInfo){gpsInfo = Math.abs(gpsInfo);String dms = Location.convert(gpsInfo, Location.FORMAT_SECONDS);String[] splits = dms.split(":");String[] secnds = (splits[2]).split("\\.");String seconds;if (secnds.length == 0) {seconds = splits[2];} else {seconds = secnds[0];}return splits[0] + "/1," + splits[1] + "/1," + seconds + "/1"; }疑問:
官方api:
public boolean getLatLong (float[] output)
釋義:Stores the latitude and longitude value in a float array. The first element is the latitude, and the second element is the longitude. Returns false if the Exif tags are not available.
此方法是以浮點型數組來存儲經緯度信息的,詳細存儲到哪個節點有待考證。假設是自己主動存儲到TAG_GPS_LATITUDE和TAG_GPS_LONGITUDE節點的話,那么前邊的轉換方法就能夠省掉了。
有興趣的朋友能夠考證一下哦。
轉載于:https://www.cnblogs.com/mqxnongmin/p/10548687.html
總結
以上是生活随笔為你收集整理的JPEG图片扩展信息读取与改动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三周学习情况报告
- 下一篇: 云时代架构--阅读笔记03