通過(guò)Python讀取照片的Exif信息解鎖圖片背后的故事
引言
在數(shù)字?jǐn)z影時(shí)代,我們拍攝的照片不僅是靜態(tài)的圖像,還包含了豐富的元數(shù)據(jù),其中最重要的之一就是Exif信息。Exif(Exchangeable image file format)是一種用于儲(chǔ)存照片元數(shù)據(jù)的標(biāo)準(zhǔn)格式,包含了拍攝設(shè)備、曝光時(shí)間、ISO感光度等詳細(xì)信息。通過(guò)Python讀取照片的Exif信息,能夠深入了解每張照片背后的故事。
安裝必要的庫(kù)
首先,確保已經(jīng)安裝了Pillow
庫(kù),它是Python Imaging Library(PIL)的一個(gè)友好分支,提供了強(qiáng)大的圖像處理功能。
pip install Pillow
基礎(chǔ)用法
通過(guò)以下示例代碼,可以簡(jiǎn)單地讀取一張照片的Exif信息。
from PIL import Image from PIL.ExifTags import TAGS, GPSTAGS def get_exif_data(image_path): image = Image.open(image_path) exif_data = image._getexif() if exif_data is not None: for tag, value in exif_data.items(): tag_name = TAGS.get(tag, tag) print(f"{tag_name}: {value}") # 讀取照片的Exif信息 get_exif_data("sample.jpg")
Exif信息解析
Exif信息是一個(gè)包含各種標(biāo)簽的字典,其中每個(gè)標(biāo)簽都對(duì)應(yīng)著不同的信息。為了更好地理解這些信息,可以通過(guò)ExifTags模塊解析標(biāo)簽名稱。
from PIL.ExifTags import TAGS def decode_exif(exif): decoded_exif = {} for tag, value in exif.items(): tag_name = TAGS.get(tag, tag) decoded_exif[tag_name] = value return decoded_exif # 讀取并解析Exif信息 exif_data = Image.open("sample.jpg")._getexif() decoded_exif = decode_exif(exif_data) print(decoded_exif)
GPS信息提取
對(duì)于包含GPS信息的照片,還可以提取并解析GPS相關(guān)的信息。
from PIL.ExifTags import GPSTAGS def get_gps_info(image_path): image = Image.open(image_path) exif_data = image._getexif() if exif_data is not None and 34853 in exif_data: gps_info = exif_data[34853] decoded_gps = {} for tag, value in gps_info.items(): tag_name = GPSTAGS.get(tag, tag) decoded_gps[tag_name] = value return decoded_gps else: return None # 讀取并解析GPS信息 gps_info = get_gps_info("sample.jpg") print(gps_info)
實(shí)際應(yīng)用場(chǎng)景
通過(guò)讀取照片的Exif信息,可以在項(xiàng)目中應(yīng)用各種場(chǎng)景,如自動(dòng)整理照片庫(kù)、提取拍攝設(shè)備信息、統(tǒng)計(jì)拍攝地點(diǎn)等。
以下是一個(gè)更為詳細(xì)的應(yīng)用場(chǎng)景,展示了如何利用Exif信息統(tǒng)計(jì)拍攝地點(diǎn)并生成可視化結(jié)果。
import os from PIL import Image import folium from folium import plugins def extract_gps_info(image_path): image = Image.open(image_path) exif_data = image._getexif() if exif_data is not None and 34853 in exif_data: gps_info = exif_data[34853] return gps_info else: return None def generate_map(photo_folder): photo_map = folium.Map(location=[0, 0], zoom_start=2) for root, dirs, files in os.walk(photo_folder): for file in files: if file.lower().endswith(('.jpg', '.jpeg')): file_path = os.path.join(root, file) gps_info = extract_gps_info(file_path) if gps_info: lat, lon = gps_info[2][0] + gps_info[2][1]/60 + gps_info[2][2]/3600, gps_info[4][0] + gps_info[4][1]/60 + gps_info[4][2]/3600 folium.Marker([lat, lon], popup=f"<img src='{file_path}' width='200px'>").add_to(photo_map) return photo_map # 生成拍攝地點(diǎn)分布地圖 result_map = generate_map("photo_library") result_map.save("photo_map.html")
這個(gè)例子使用了folium
庫(kù),通過(guò)解析照片的GPS信息,提取經(jīng)緯度信息,并在地圖上標(biāo)記拍攝地點(diǎn)。這樣的應(yīng)用場(chǎng)景可以讓用戶更直觀地了解照片的拍攝地點(diǎn)分布情況。
總結(jié)
通過(guò)讀取照片的Exif信息,可以深入挖掘照片背后的故事。本文介紹了如何使用Python讀取照片的Exif信息,并通過(guò)實(shí)際場(chǎng)景展示了其豐富的應(yīng)用。通過(guò)分析Exif信息,可以獲取拍攝時(shí)間、設(shè)備信息、甚至是GPS坐標(biāo)。這為自動(dòng)整理照片庫(kù)、統(tǒng)計(jì)拍攝地點(diǎn)等應(yīng)用場(chǎng)景提供了便捷的解決方案。特別是在拍攝地點(diǎn)統(tǒng)計(jì)的場(chǎng)景中,展示了如何將GPS信息轉(zhuǎn)化為可視化的地圖,使用戶更直觀地了解照片的拍攝分布情況。這為照片管理、旅行記錄等提供了實(shí)用而有趣的工具??傮w而言,通過(guò)深入理解和利用Exif信息,能夠更好地管理和利用照片數(shù)據(jù),為照片賦予更多的價(jià)值。
以上就是通過(guò)Python讀取照片的Exif信息解鎖圖片背后的故事的詳細(xì)內(nèi)容,更多關(guān)于Python讀取照片Exif信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python神經(jīng)網(wǎng)絡(luò)slim常用函數(shù)訓(xùn)練保存模型
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用slim函數(shù)進(jìn)行模型的訓(xùn)練及保存模型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

如何計(jì)算 tensorflow 和 pytorch 模型的浮點(diǎn)運(yùn)算數(shù)

使用 python pyautogui實(shí)現(xiàn)鼠標(biāo)鍵盤控制功能

淺談配置OpenCV3 + Python3的簡(jiǎn)易方法(macOS)