日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JPEG图片扩展信息读取与改动

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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图片扩展信息读取与改动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。