CodeGym /Khóa học Java /Python SELF VI /Làm việc với siêu dữ liệu

Làm việc với siêu dữ liệu

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Làm việc với siêu dữ liệu EXIF

Siêu dữ liệu EXIF lưu trữ thông tin về các đặc điểm của hình ảnh, chẳng hạn như các thông số chụp (ISO, tốc độ màn trập, khẩu độ), ngày tạo, hướng và thậm chí cả tọa độ nơi chụp. Dữ liệu EXIF có thể được trích xuất và sử dụng để phân tích hình ảnh hoặc tự động hóa quá trình xử lý của chúng.

Trích xuất dữ liệu EXIF

Siêu dữ liệu EXIF có thể được trích xuất bằng thuộc tính info hoặc getexif(). Phương pháp getexif() cung cấp quyền truy cập vào toàn bộ tập dữ liệu EXIF, nếu chúng có trong hình ảnh.

Python

# Trích xuất dữ liệu EXIF
exif_data = image._getexif()

# Kiểm tra sự tồn tại của 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("Dữ liệu EXIF không được tìm thấy.")

Trong đoạn mã này, Image.ExifTags.TAGS được sử dụng để giải mã các ID tag EXIF thành các tên dễ đọc, như "DateTime", "ExposureTime", "ISOSpeedRatings", v.v. Nếu hình ảnh không chứa dữ liệu EXIF, hàm sẽ chỉ hiển thị thông báo về điều này.

2. Trích xuất siêu dữ liệu quan trọng

Siêu dữ liệu EXIF thường bao gồm các thông số chụp như độ phân giải, hướng và vị trí địa lý. Hãy xem cách lấy một số giá trị này nếu chúng có trong dữ liệu EXIF.

Trích xuất ngày giờ chụp, độ phân giải và hướng

Python

from PIL.ExifTags import TAGS

# Kiểm tra sự tồn tại của dữ liệu EXIF
if exif_data is not None:
    # Khởi tạo các biến để lưu trữ giá trị
    date_time = None
    orientation = None
    resolution = None

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

        # Trích xuất dữ liệu theo tag
        if tag == "DateTime":
            date_time = value
        elif tag == "Orientation":
            orientation = value
        elif tag == "XResolution" hoặc tag == "YResolution":
            resolution = value

    print("Ngày giờ chụp:", date_time)
    print("Hướng:", orientation)
    print("Độ phân giải:", resolution)
else:
    print("Dữ liệu EXIF không được tìm thấy.")

Trong ví dụ này, các giá trị được trích xuất cho DateTime (ngày giờ chụp), Orientation (hướng của hình ảnh) và XResolution/YResolution (độ phân giải của hình ảnh). Những dữ liệu này thường hữu ích khi sắp xếp ảnh hoặc lập báo cáo.

3. Thêm và chỉnh sửa siêu dữ liệu EXIF

Mặc dù Pillow hỗ trợ hạn chế việc thêm siêu dữ liệu EXIF, bạn có thể lưu giữ siêu dữ liệu khi chuyển đổi hình ảnh, nếu chúng đã có trong ảnh gốc.

Ví dụ: Lưu giữ siêu dữ liệu khi chuyển đổi

Để lưu giữ siêu dữ liệu EXIF khi lưu hình ảnh, hãy sử dụng tham số exif khi gọi phương pháp save().

Python

# Kiểm tra dữ liệu EXIF và lưu giữ với siêu dữ liệu
if exif_data is not None:
    exif_bytes = image.info['exif']
    image.save("converted_with_exif.jpg", exif=exif_bytes)
else:
    print("Dữ liệu EXIF không tồn tại.")

Đoạn mã này lưu giữ siêu dữ liệu EXIF khi chuyển đổi hình ảnh sang định dạng khác, điều này cho phép lưu giữ các thông số chụp ban đầu.

4. Ví dụ:

Ví dụ toàn diện về làm việc với định dạng và siêu dữ liệu EXIF

Cuối cùng, hãy xem xét một ví dụ chuyển đổi hình ảnh, tối ưu hóa nó và lưu giữ siêu dữ liệu EXIF.

Python

from PIL import Image, ExifTags

# Mở hình ảnh
image = Image.open("original.jpg")

# Kiểm tra dữ liệu EXIF
exif_data = image._getexif()
if exif_data:
    exif_bytes = image.info['exif']  # Lưu dữ liệu EXIF để sử dụng sau
else:
    print("Dữ liệu EXIF không tồn tại.")

# Chuyển hình ảnh sang PNG và tối ưu hóa
image_png = image.convert("RGB")
image_png.save("optimized_image.png", optimize=True)

# Chuyển sang JPEG với lưu giữ dữ liệu EXIF và giảm chất lượng
if exif_data:
    image.save("compressed_with_exif.jpg", quality=85, exif=exif_bytes)
else:
    image.save("compressed_without_exif.jpg", quality=85)

Đoạn mã này bao gồm:

  • Chuyển đổi hình ảnh sang định dạng PNG với tối ưu hóa.
  • Chuyển đổi sang định dạng JPEG với giảm chất lượng để tối ưu hóa kích thước.
  • Lưu giữ siêu dữ liệu EXIF khi chuyển đổi, nếu chúng tồn tại.

Ứng dụng thực tế của việc làm việc với định dạng và siêu dữ liệu EXIF

  • Tối ưu hóa hình ảnh cho web: Chuyển đổi hình ảnh sang các định dạng được tối ưu hóa như JPEG và PNG giúp giảm kích thước tệp và tăng tốc độ tải trang.
  • Trích xuất dữ liệu cho báo cáo: Siêu dữ liệu EXIF chứa thông tin về các thông số chụp, có thể hữu ích cho việc phân tích ảnh và tạo báo cáo.
  • Duy trì siêu dữ liệu khi chỉnh sửa: Khi chỉnh sửa ảnh, bạn có thể giữ nguyên các thông số chụp ban đầu, điều này hữu ích cho việc lưu trữ và tài liệu hóa.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION