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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

图片Exif信息解析(Java实现)

發(fā)布時(shí)間:2023/12/18 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图片Exif信息解析(Java实现) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

可交換圖像文件(Exchangeable Image File,Exif)信息圖像在拍攝時(shí)保留的相關(guān)參數(shù):比如圖像信息(廠商,分辨率等),相機(jī)拍攝記錄(ISO,白平衡,飽和度,銳度等),縮略圖(縮略圖寬度,高度等),GPS(拍攝時(shí)的經(jīng)度,緯度,高度)等,按照?qǐng)D像文件標(biāo)準(zhǔn)存儲(chǔ)在圖像頭文件。一般使用支持圖像讀取的軟件即可查看部分參數(shù),但是圖像如果修改,Exif信息可能丟失。

? ?
問(wèn)題

然而一些開(kāi)發(fā)任務(wù)需要圖片Exif信息某項(xiàng)信息進(jìn)行后續(xù)處理,無(wú)法使用軟件獲取信息輸入到程序中,對(duì)開(kāi)發(fā)任務(wù)帶來(lái)一些困難。


解決

引入drewnoakes庫(kù),該庫(kù)可以分析照片、視頻相關(guān)信息等強(qiáng)大功能。

有興趣可關(guān)注微信公眾號(hào):Java爛筆頭,回復(fù):drewnoakes,查看完整源碼及說(shuō)明。


示例代碼

Maven依賴

<dependency><groupId>com.drewnoakes</groupId><artifactId>metadata-extractor</artifactId><version>2.7.2</version></dependency>

代碼實(shí)現(xiàn)

import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.Tag; import java.io.File;public class ExifTest {public static void main(String[] args) throws Exception {File file = new File("D:\\Java學(xué)習(xí)\\二維碼生成與解析\\mmexport1632468955620.jpg");printImageTags(file);}/*** 讀取照片相關(guān)信息*/private static void printImageTags(File file) throws ImageProcessingException, Exception {Metadata metadata = ImageMetadataReader.readMetadata(file);String lat = "";String log = "";for (Directory directory : metadata.getDirectories()) {for (Tag tag : directory.getTags()) {String tagName = tag.getTagName(); //標(biāo)簽名String desc = tag.getDescription(); //標(biāo)簽信息System.out.println(tagName + " " + desc);//照片信息}}} }

照片信息輸出

(由于不同照片所包含信息不完全一樣,部分相關(guān)信息沒(méi)有)

Compression Type Baseline Data Precision 8 bits Image Height 1080 pixels Image Width 1440 pixels Number of Components 3 Component 1 Y component: Quantization table 0, Sampling factors 2 horiz/2 vert Component 2 Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert Component 3 Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert Version 1.1 Resolution Units none X Resolution 1 dot Y Resolution 1 dot Profile Size 536 Version 2.1.0 Class Display Device Color space RGB Profile Connection Space XYZ Profile Date/Time Wed Dec 31 08:00:00 CST 2 Signature acsp Rendering Intent Media-Relative Colorimetric XYZ values 0.9642029 1.0 0.8249054 Tag Count 9 Profile Description 1 enUS(sRGB ) Red Colorant (0.43606567, 0.2224884, 0.013916016) Green Colorant (0.3851471, 0.71687317, 0.097076416) Blue Colorant (0.1430664, 0.06060791, 0.71409607) Red TRC para(0x70617261): 40 bytes Green TRC para(0x70617261): 40 bytes Blue TRC para(0x70617261): 40 bytes Media White Point (0.9642029, 1.0, 0.8249054) Copyright 1 enUS(Google Inc. 2016)


應(yīng)用場(chǎng)景

需求:根據(jù)照片(包含位置信息)查找該照片拍攝定位

思路:首先引入drewnoakes庫(kù)讀取照片所有信息,判斷tag信息為經(jīng)度、緯度,根據(jù)經(jīng)緯度轉(zhuǎn)換為具體坐標(biāo)位置。

工具代碼:

以下代碼還引入alibaba.fasejson庫(kù)對(duì)讀取的Exif信息進(jìn)一步分析

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.Tag; import java.io.File; import java.net.URL;public class EXIFUtil {public static void main(String[] args) throws Exception {File file = new File("D:\\Java學(xué)習(xí)\\二維碼生成與解析\\mmexport1632468955620.jpg");printImageTags(file);}/*** 讀取照片里面的信息*/private static void printImageTags(File file) throws ImageProcessingException, Exception {Metadata metadata = ImageMetadataReader.readMetadata(file);String lat = "";String log = "";for (Directory directory : metadata.getDirectories()) {for (Tag tag : directory.getTags()) {String tagName = tag.getTagName(); //標(biāo)簽名String desc = tag.getDescription(); //標(biāo)簽信息System.out.println(tagName + " " + desc);//照片信息switch (tagName) {// 經(jīng)度case "GPS Longitude":lat = pointToLatlong(desc);break;// 緯度case "GPS Latitude":log = pointToLatlong(desc);break;default:break;}}}String add = getAdd(log, lat);JSONObject jsonObject = JSON.parseObject(add);JSONArray jsonArray = jsonObject.getJSONArray("addrList");JSONObject jso = jsonArray.getJSONObject(0);String allAdd = jso.getString("admName");String arr[] = allAdd.split(",");String adds = jso.getString("name");System.out.println("省:" + arr[0] + "\n市:" + arr[1] + "\n區(qū):" + arr[2] + "\n" + adds);}/*** 經(jīng)緯度格式 轉(zhuǎn)換** @param point 坐標(biāo)點(diǎn)** @return*/public static String pointToLatlong(String point) {Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim());Double fen = Double.parseDouble(point.substring(point.indexOf("°") + 1, point.indexOf("'")).trim());Double miao = Double.parseDouble(point.substring(point.indexOf("'") + 1, point.indexOf("\"")).trim());Double duStr = du + fen / 60 + miao / 60 / 60;return duStr.toString();}/*** @param log 經(jīng)度** @param lat 緯度** @return*/public static String getAdd(String log, String lat) {//參數(shù)解釋: 緯度,經(jīng)度 type 001 (100代表道路,010代表POI,001代表門址,111可以同時(shí)顯示前三項(xiàng))String urlString = "http://gc.ditu.aliyun.com/regeocoding?l=" + lat + "," + log + "&type=010";String res = "";try {URL url = new URL(urlString);java.net.HttpURLConnection conn = (java.net.HttpURLConnection) url.openConnection();conn.setDoOutput(true);conn.setRequestMethod("POST");java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {res += line + "\n";}in.close();} catch (Exception e) {System.out.println("error in wapaction,and e is " + e.getMessage());}return res;}}

示例源碼以及應(yīng)用源碼關(guān)注微信公眾號(hào):Java爛筆頭,回復(fù):EXIFUtil


總結(jié)

以上是生活随笔為你收集整理的图片Exif信息解析(Java实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。