CodeGym /課程 /Python SELF TW /處理元數據

處理元數據

Python SELF TW
等級 46, 課堂 3
開放

1. 處理 EXIF 元數據

EXIF 元數據儲存了圖片的屬性資訊,比如拍攝參數(ISO、快門速度、光圈)、創建日期、方向,甚至地理座標位置。EXIF 數據可以被提取,用於分析圖片或自動化處理。

提取 EXIF 數據

可以使用 infogetexif() 屬性來提取 EXIF 元數據。getexif() 方法提供對圖片中所有 EXIF 數據的訪問(如果存在)。

Python

# 提取 EXIF 數據
exif_data = image._getexif()

# 檢查 EXIF 數據是否存在
if exif_data is not None:
    for tag_id, value in exif_data.items():
        tag = Image.ExifTags.TAGS.get(tag_id, tag_id)
        print(f"{tag}: {value}")
else:
    print("EXIF 數據未找到。")

在這段代碼中,Image.ExifTags.TAGS 被用來將 EXIF 標籤的 ID 解碼為可讀名稱,例如 "DateTime""ExposureTime""ISOSpeedRatings" 等等。如果圖片不含 EXIF 數據,函數將輸出一條相關提示。

2. 提取關鍵元數據

EXIF 元數據通常包含拍攝參數,比如解析度、方向和地理位置信息。下面展示如何從 EXIF 數據中獲取這些信息(如果存在)。

提取拍攝日期時間、解析度和方向

Python

from PIL.ExifTags import TAGS

# 檢查是否有 EXIF 數據
if exif_data is not None:
    # 初始化變數儲存數據
    date_time = None
    orientation = None
    resolution = None

    for tag_id, value in exif_data.items():
        tag = TAGS.get(tag_id, tag_id)

        # 根據標籤提取數據
        if tag == "DateTime":
            date_time = value
        elif tag == "Orientation":
            orientation = value
        elif tag == "XResolution" or tag == "YResolution":
            resolution = value

    print("拍攝日期與時間:", date_time)
    print("方向:", orientation)
    print("解析度:", resolution)
else:
    print("EXIF 數據未找到。")

在這個例子中,提取了 DateTime(拍攝日期與時間)、Orientation(圖片方向)以及 XResolution/YResolution(圖片解析度)。這些數據經常用於整理照片或生成報告。

3. 添加和編輯 EXIF 元數據

雖然 Pillow 對於添加 EXIF 數據的支持有限,但如果圖片的原始 EXIF 數據已存在,可以在轉換圖片時保留這些數據。

範例: 轉換時保留元數據

在保存圖片時,使用 exif 參數來保留 EXIF 數據。

Python

# 檢查是否有 EXIF 數據並保存
if exif_data is not None:
    exif_bytes = image.info['exif']
    image.save("converted_with_exif.jpg", exif=exif_bytes)
else:
    print("EXIF 數據不存在。")

這段代碼在將圖片轉換為其他格式時保留 EXIF 數據,以便保存原始拍攝參數。

4. 範例:

完整處理 EXIF 格式與元數據範例

最後,我們來看一個範例,該範例包括轉換圖片、優化圖片並保留 EXIF 元數據。

Python

from PIL import Image, ExifTags

# 打開圖片
image = Image.open("original.jpg")

# 檢查是否有 EXIF 數據
exif_data = image._getexif()
if exif_data:
    exif_bytes = image.info['exif']  # 保存 EXIF 數據以供後續使用
else:
    print("EXIF 數據不存在。")

# 將圖片轉換為 PNG 格式並優化
image_png = image.convert("RGB")
image_png.save("optimized_image.png", optimize=True)

# 儲存為 JPEG 格式,保留 EXIF 數據並壓縮品質
if exif_data:
    image.save("compressed_with_exif.jpg", quality=85, exif=exif_bytes)
else:
    image.save("compressed_without_exif.jpg", quality=85)

這段代碼包括:

  • 將圖片轉換為 PNG 格式並優化。
  • 轉換為 JPEG 格式,減少品質以優化大小。
  • 在轉換時保留 EXIF 數據(如果存在)。

EXIF 格式與元數據的實際應用

  • 網頁圖片優化: 將圖片轉換為優化格式(例如 JPEG 和 PNG),能減少文件大小,加速網頁加載。
  • 報告數據分析: EXIF 元數據包含拍攝參數資訊,這些信息對圖片分析和報告生成非常有用。
  • 保持元數據完整性: 在圖片編輯時可以保留原始拍攝參數,適合用於檔案管理和記錄。
1
任務
Python SELF TW, 等級 46, 課堂 3
上鎖
提取圖像的EXIF數據
提取圖像的EXIF數據
2
任務
Python SELF TW, 等級 46, 課堂 3
上鎖
保存及優化帶有EXIF數據的圖片
保存及優化帶有EXIF數據的圖片
4
任務
Python SELF TW, 等級 46, 課堂 3
上鎖
基於EXIF數據的圖像處理自動化
基於EXIF數據的圖像處理自動化
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION