Việc sử dụng hàng loạt điện thoại thông minh — về cơ bản là máy tính di động, giàu cảm biến, nhận biết vị trí, luôn kết nối mạng — đã mang đến cho chúng ta hai hậu quả lớn mà tác động của chúng đối với quyền riêng tư và bảo mật vẫn chưa được hiểu đầy đủ - Nhiều người hơn bao giờ hết có một chiếc máy ảnh thường nằm trong tầm tay
- Theo mặc định, ảnh được chụp bằng các máy ảnh này có thể tiết lộ thông tin nhạy cảm và nhiều người dùng không biết rằng điều đó đang xảy ra
Ngoài dữ liệu ảnh, ảnh chụp bằng điện thoại thông minh và máy ảnh kỹ thuật số hiện đại còn chứa siêu dữ liệu, đây là thông tin bổ sung về ảnh. Siêu dữ liệu này được lưu trữ ở định dạng có tên EXIF, viết tắt của định dạng Tệp hình ảnh có thể thay đổi, là tiêu chuẩn liên tục phát triển cho thông tin được thêm vào bản ghi âm và hình ảnh kỹ thuật số Trong ảnh, EXIF có thể bao gồm các thông tin như - Kích thước và mật độ pixel của ảnh
- Kiểu dáng và kiểu dáng của thiết bị được sử dụng để chụp ảnh
- Thu phóng, khẩu độ, đèn flash và các cài đặt máy ảnh khác khi chụp ảnh
- Hướng của thiết bị khi chụp ảnh
- Khi bức ảnh được chụp
- Bức ảnh được chụp ở đâu
- Camera quay về hướng nào
- Độ cao mà ảnh được chụp
Siêu dữ liệu này hữu ích cho việc sắp xếp, lập danh mục và tìm kiếm thông qua ảnh, đó là lý do tại sao tiêu chuẩn EXIF được xác định. Tuy nhiên, nó cũng đưa ra những lo ngại về quyền riêng tư và bảo mật mà nhiều người dùng không tính đến Một trong những câu chuyện cảnh báo sớm nhất về EXIF là sự cố quyền riêng tư năm 2012 liên quan đến người sáng lập công ty chống vi-rút John McAfee. Đây là khoảng thời gian thú vị trong cuộc đời của McAfee, khi anh trốn tránh cơ quan thực thi pháp luật trong khi vẫn trả lời phỏng vấn độc quyền, được săn đón nhiều cho các nhà báo. Một nhà báo may mắn được phỏng vấn đã quyết định thể hiện sự may mắn của mình bằng cách đăng một bức ảnh của McAfee mà không xóa dữ liệu EXIF của nó trước. Dữ liệu đó đã cho biết vị trí của anh ta và dẫn đến việc anh ta bị bắt Bạn có thể biết nhiều câu chuyện gần đây về việc cơ quan thực thi pháp luật đã bắt giữ những kẻ tình nghi sử dụng ảnh được đăng lên một trang web truyền thông xã hội mà không đề phòng "xóa" dữ liệu EXIF của họ trong quá trình tải lên Tôi nghi ngờ bạn là nhà phát triển có ý thức bảo mật, có lẽ bạn đang tự hỏi mình những câu hỏi như thế này - Làm cách nào tôi có thể lập trình phát hiện và đọc siêu dữ liệu EXIF từ ảnh?
- Làm cách nào tôi có thể thay đổi, thêm hoặc xóa siêu dữ liệu EXIF theo chương trình?
Nếu bạn có Python 3. 6 trở lên được cài đặt trên máy tính, bạn có thể tìm hiểu qua các bài tập thực hành bên dưới. Chúng sẽ bao gồm một số gói Python mà bạn có thể kết hợp vào ứng dụng của mình để trích xuất, thêm, thay đổi hoặc xóa dữ liệu EXIF khỏi ảnh. Trên đường đi, bạn sẽ không chỉ sử dụng các kỹ năng lập trình của mình mà còn thực hiện một số công việc thám tử. Mô-đun exifCó một số mô-đun Python có thể truy cập dữ liệu EXIF trong ảnh kỹ thuật số. Đối với bài viết này, chúng tôi sẽ tập trung vào exif. API của nó rất Pythonic đến nỗi nó gần như là một phần của ngôn ngữ chứ không phải là một mô-đun Để cài đặt exif, hãy sử dụng image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 6 bằng cách nhập thông tin sau vào dòng lệnhpip install exif
Nếu việc nhập lệnh này cho bạn thông báo lỗi, hãy thử sử dụng lệnh image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 7 để thay thế. image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 8 là phiên bản của image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 6, trình quản lý gói Python, dành riêng cho Python 3Nếu bạn không duy trì bất kỳ mã Python 2 nào nhưng phải sử dụng image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 8 để cài đặt các gói Python, thì bạn nên cân nhắc nâng cấp bản cài đặt Python của mình
Đang tải ảnh và kiểm tra chúng để tìm dữ liệu EXIFHãy làm cho exif hoạt động. Hãy xem xét hai bức ảnh này, được đặt tên là cây cọ 1. jpg và cây cọ 2. jpg Giả sử bạn đã được hỏi những câu hỏi này - Những bức ảnh này được chụp trên cùng một thiết bị hay hai thiết bị khác nhau?
- Bức ảnh nào được chụp đầu tiên?
- Những bức ảnh này được chụp ở đâu?
Để trả lời những câu hỏi này, chúng tôi sẽ tải dữ liệu từ các tệp ảnh này vào các đối tượng exif Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 và sau đó sử dụng các đối tượng đó để kiểm tra siêu dữ liệu EXIFfrom exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image]
Mã mở từng tệp dưới dạng chỉ đọc. Nó đọc dữ liệu của tệp ở định dạng nhị phân thành một đối tượng tệp, sau đó nó sử dụng để khởi tạo một đối tượng exif Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1. Cuối cùng, nó đặt các đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 vào một mảng để chúng ta có thể lặp lại chúng, thực hiện các thao tác tương tự trên siêu dữ liệu EXIF của mỗi ảnhHãy thực hiện thao tác đầu tiên của chúng tôi trên mỗi bức ảnh. xác nhận rằng chúng thực sự chứa dữ liệu EXIF. Chúng tôi sẽ làm điều này bằng cách kiểm tra từng thuộc tính Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 của đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 5. Đối với mọi hình ảnh chứa dữ liệu EXIF, chúng tôi sẽ sử dụng thuộc tính Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 7 của Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 để hiển thị phiên bản EXIF mà nó đang sử dụngfor index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}")
Khi chạy, mã này tạo ra các kết quả sau Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information.
Bây giờ chúng ta biết rằng cả hai bức ảnh đều chứa thông tin EXIF và sử dụng các phiên bản EXIF khác nhau. Rất có khả năng những bức ảnh này được chụp trên các máy ảnh khác nhau Siêu dữ liệu EXIF nào có sẵn trong mỗi ảnh?Hãy coi EXIF là cấu trúc dữ liệu khóa-giá trị tương tự như từ điển Python. Các cặp khóa-giá trị EXIF được gọi là thẻ và mỗi thẻ có thể chứa giá trị chuỗi hoặc số. Có hàng chục thẻ trong tiêu chuẩn EXIF hiện tại (phiên bản 2. 32) và bất kỳ ai — từ nhà sản xuất điện thoại thông minh và máy ảnh đến nhiếp ảnh gia — đều có thể tự do thêm Dưới đây là danh sách đầy đủ các thẻ EXIF mà bạn có thể tìm thấy trong ảnh kỹ thuật số. Nó bao gồm các thẻ không có trong tiêu chuẩn EXIF, nhưng được cung cấp bởi một số thiết bị hoặc phần mềm
EXIF là một trong những định dạng không chính thức mà các nhà sản xuất chọn và chọn những tính năng mà họ sẽ triển khai. Điều này có nghĩa là ảnh do các máy ảnh và điện thoại thông minh khác nhau tạo ra sẽ có các bộ thẻ EXIF khác nhau Nhìn chung, bạn có thể tin tưởng vào việc điện thoại thông minh nhúng một số thẻ EXIF thường được sử dụng vào ảnh chúng chụp, bao gồm kiểu dáng và kiểu dáng của điện thoại thông minh, ngày và giờ chụp ảnh, địa điểm chụp điện thoại và các thông tin phổ biến khác. Do sự khác biệt giữa các thiết bị và sự sẵn có của các công cụ để chỉnh sửa dữ liệu EXIF, một trong những điều đầu tiên bạn nên làm khi làm việc với dữ liệu EXIF của ảnh là xem những thẻ nào có sẵn Các đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 do mô-đun exif cung cấp hiển thị các thẻ EXIF dưới dạng thuộc tính của đối tượng đó. Điều này có nghĩa là bạn có thể sử dụng hàm tích hợp sẵn của Python trên một đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 để xem nó có những thẻ EXIF nàoĐoạn mã sau hiển thị danh sách các thành viên của mỗi đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 trong danh sách hình ảnh cây cọ của chúng taimage_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n")
Bạn sẽ thấy đầu ra sau Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Như bạn có thể thấy, trong khi cả hai đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 đều có rất nhiều phần tử chung, thì hình ảnh 1 chứa nhiều hơn một vài phần tử so với hình ảnh 0. Điều này có nghĩa là hình ảnh 1 có nhiều thẻ EXIF hơn hình ảnh 0. Đây là một chỉ báo rõ ràng rằng hình ảnh 0 và hình ảnh 1 được chụp trên các thiết bị khác nhauBạn có thể sử dụng các bộ Python để xác định các thành viên mà hình ảnh 0 và hình ảnh 1 có điểm chung common_members = set(image_members[0]).intersection(set(image_members[1]))
common_members_sorted = sorted(list(common_members))
print("Image 0 and Image 1 have these members in common:")
print(f"{common_members_sorted}")
Chạy mã này tạo ra kết quả này Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Nếu bạn đã xem tên của các thẻ EXIF trong tài liệu (danh sách các thẻ EXIF tiêu chuẩn hoặc danh sách mở rộng), bạn có thể nhận thấy rằng các tên thẻ EXIF nằm trong common_members = set(image_members[0]).intersection(set(image_members[1]))
common_members_sorted = sorted(list(common_members))
print("Image 0 and Image 1 have these members in common:")
print(f"{common_members_sorted}") 3 trong khi các thuộc tính EXIF trong các đối tượng exif Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 nằm trong common_members = set(image_members[0]).intersection(set(image_members[1]))
common_members_sorted = sorted(list(common_members))
print("Image 0 and Image 1 have these members in common:")
print(f"{common_members_sorted}") 5. Điều này là do các tác giả của mô-đun exif đang cố gắng tuân theo Hướng dẫn về Phong cách Python và đã thiết kế Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 để chuyển đổi tên thẻ EXIF thành tên thuộc tính Pythonic
Các thành viên không phải EXIF của lớp _______1 của exifHầu hết, nhưng không phải tất cả, các thành viên của bất kỳ phiên bản Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 nào sẽ là các thuộc tính tương ứng với các thẻ EXIF trong hình ảnh. Tuy nhiên, có một số thành viên làm việc với siêu dữ liệu EXIF. Chúng được liệt kê trong bảng dưới đâyThành viên lớp Mô tảcommon_members = set(image_members[0]).intersection(set(image_members[1]))
common_members_sorted = sorted(list(common_members))
print("Image 0 and Image 1 have these members in common:")
print(f"{common_members_sorted}") 9thuộc tínhImage 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 0Xóa thẻ EXIF được chỉ định bởi thuộc tính chuỗi khỏi hình ảnh. Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1Xóa tất cả các thẻ EXIF khỏi hình ảnh. Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 2thuộc tính, mặc định=NoneImage 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 0Trả về giá trị cho thẻ EXIF được chỉ định bởi thuộc tính chuỗi. Nếu thẻ không có sẵn hoặc có chứa giá trị, thẻ sẽ trả về giá trị được chỉ định bởi đối số từ khóa Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 4. Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 5 Trả về dữ liệu hiện tại cho hình ảnh, định dạng để ghi vào tệp nhị phân. Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 6Trả về dữ liệu nhị phân cho hình thu nhỏ của hình ảnh. Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 5Một giá trị Boolean trả về Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 8 nếu hình ảnh hiện chứa siêu dữ liệu EXIF. Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 9thuộc tính, giá trị_______23_______0Đặt giá trị cho thẻ EXIF được chỉ định bởi thuộc tính chuỗi. Nếu thẻ không có sẵn hoặc có chứa giá trị, thẻ sẽ trả về giá trị được chỉ định bởi đối số từ khóa Image 0 and Image 1 have these members in common:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'make', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 4Chúng tôi sẽ đề cập đến hầu hết các thuộc tính và phương thức này trong bài viết này Nhận thông tin ảnh cơ bảnHãy trả lời câu hỏi đầu tiên về những bức ảnh này. Chúng được chụp trên cùng một thiết bị hay hai thiết bị khác nhau? Kiểu dáng và kiểu dáng của thiết bị được sử dụng để chụp ảnhCả hai hình ảnh đều có thẻ for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 2 và for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 3, vì vậy, hãy sử dụng những thẻ đó để xác định loại thiết bị nào được sử dụng để chụp những bức ảnh nàyfor index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n")
Đây là kết quả của đoạn mã trên Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro
Điều này xác nhận rằng các bức ảnh được chụp bằng các thiết bị khác nhau và hiện chúng tôi đã biết chi tiết cụ thể Thông tin bổ sung và tùy chọn về các thiết bịHãy thu thập thêm một số thông tin về các thiết bị được sử dụng để chụp ảnh, cụ thể là chi tiết về ống kính và phiên bản hệ điều hành của chúng Không phải tất cả các thiết bị đều báo cáo loại ống kính trong siêu dữ liệu EXIF của chúng, vì vậy chúng tôi sẽ sử dụng phương pháp for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 5 của Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1, tương tự như phương pháp for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 5 được sử dụng bởi từ điển Python. Giống như phương thức for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 5 của từ điển Python, phương thức for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 5 được cung cấp bởi đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 của exif xử lý khéo léo trường hợp khóa đã cho không tồn tạiĐoạn mã dưới đây sử dụng for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 5 để cố gắng truy cập các phiên bản ống kính và hệ điều hành được sử dụng để chụp ảnh. Nếu một thuộc tính cụ thể không tồn tại, giá trị của nó sẽ được hiển thị là “Không xác định”from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 0Đây là đầu ra của nó from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 1Lưu ý rằng điện thoại được sử dụng để chụp ảnh 0 (Motorola One Hyper), không cung cấp thuộc tính Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro 1, Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro 2, Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro 3 hoặc Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro 4. Nếu chúng tôi đã cố gắng truy cập chúng trực tiếp (ví dụ: Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro 5), kết quả sẽ là lỗi. Phương pháp for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 5 cho phép chúng tôi cung cấp một giá trị thay thế cho các thuộc tính không tồn tại đóNgày và giờ chụp ảnhcâu hỏi tiếp theo là. bức ảnh nào được chụp đầu tiên? Chúng ta có thể tìm hiểu bằng cách xem thuộc tính Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro 7 của mỗi ảnh, ghi rõ ngày và giờ ảnh được chụp. Bộ xử lý trong điện thoại thông minh đủ nhanh để ghi lại chính xác phần giây khi chụp ảnh và phần đó được lưu trữ trong thuộc tính Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro 8Một số điện thoại cũng ghi thuộc tính Device information - Image 0
----------------------------
Make: motorola
Model: motorola one hyper
Device information - Image 1
----------------------------
Make: Apple
Model: iPhone 12 Pro 9 mà chúng tôi có thể sử dụng để xác định phần bù của from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 00 so với UTCĐoạn mã sau hiển thị ngày và giờ mỗi bức ảnh được chụp. Nếu ảnh bao gồm dữ liệu bù thời gian, thì mã cũng sẽ hiển thị giá trị đó from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 2Đây là kết quả from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 3Như bạn có thể thấy từ đầu ra, ảnh 0 được chụp trước và ảnh 1 được chụp sau 13 giây Xác định vị trí ảnh được chụpMáy ảnh kỹ thuật số đã ghi ngày và giờ vào ảnh ngay từ đầu, nhưng phải đến khi điện thoại thông minh ghi lại vị trí chụp ảnh mới trở nên phổ biến. Trong phần này, chúng ta sẽ xem xét việc truy cập các tọa độ GPS trong siêu dữ liệu của ảnh, định dạng các tọa độ đó và làm cho các tọa độ đó dễ hiểu hơn bằng cách định vị chúng trên bản đồ và chuyển đổi chúng thành tên của quốc gia, khu vực và thành phố nơi Lấy tọa độ GPS của ảnhĐịnh dạng EXIF chỉ định một số thẻ bắt đầu bằng “gps”, chứa thông tin vị trí địa lý hữu ích, bao gồm kinh độ và vĩ độ nơi chụp ảnh from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 4Đây là đầu ra cho đoạn mã trên from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 5Lưu ý rằng các thuộc tính from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 01 và from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 02 trả về vĩ độ và kinh độ dưới dạng một bộ gồm ba giá trị, đó là- độ
- Phút (1/60 độ)
- Giây (1/60 phút hoặc 1/3600 độ)
Vĩ độ chỉ định khoảng cách góc từ đường xích đạo, có thể là bắc hoặc nam. Thuộc tính from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 03 chỉ ra hướng này, đó là from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 04 hoặc from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 05Kinh độ chỉ định khoảng cách góc từ kinh tuyến, có thể là hướng đông hoặc hướng tây. Thuộc tính from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 06 chỉ ra hướng này, đó là from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 07 hoặc from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 08Bạn có thể nhận thấy sự khác biệt nhỏ giữa các tọa độ được báo cáo trong ảnh. Điều này được mong đợi; . Sự khác biệt về tọa độ được báo cáo bởi điện thoại là theo thứ tự một phần giây, có nghĩa là khoảng 25 feet hoặc 7. 6 mét Định dạng vĩ độ và kinh độHãy xác định một vài hàm để định dạng thông tin kinh độ và vĩ độ được trả về bởi Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 thành các định dạng tiêu chuẩn- Độ, phút và giây. Ở định dạng này, vĩ độ của hình ảnh 0 sẽ được viết là 28. 0° 0. 0' 1. 56"N
- Độ thập phân. Ở định dạng này, vĩ độ của hình ảnh 0 sẽ được viết là 28. 000433333333334. Các vĩ độ phía bắc và kinh độ phía đông được biểu thị bằng các giá trị dương, trong khi các vĩ độ phía nam và kinh độ phía tây được biểu thị bằng các giá trị âm
Đây là định nghĩa cho các chức năng đó, cũng như một số mã sử dụng chúng from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 6Đây là đầu ra from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 7Hiển thị vị trí ảnh trên bản đồBạn có thể không biết vĩ độ và kinh độ của nhà mình, ngay cả khi làm tròn đến độ gần nhất. Có một số cách đơn giản để chuyển đổi dữ liệu vị trí EXIF thành thứ gì đó dễ hiểu hơn đối với con người Một cách là sử dụng mô-đun trình duyệt web tích hợp của Python để mở tab trình duyệt mới cho từng ảnh, sử dụng phiên bản thập phân của tọa độ EXIF của mỗi ảnh làm tham số cho URL Google Maps. Chúng ta sẽ tạo một hàm tiện ích có tên là from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 10 để thực hiện điều nàyfrom exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 8Khi bạn chạy nó, hai tab trình duyệt mới sẽ mở ra và mỗi tab sẽ hiển thị Google Map cho biết nơi chụp ảnh tương ứng Hiển thị thành phố, khu vực và quốc gia nơi ảnh được chụpMột cách khác để hiển thị vị trí của ảnh là sử dụng mã hóa địa lý ngược, đây là quá trình chuyển đổi tọa độ địa lý thành địa chỉ hoặc tên của một địa điểm. Để làm được điều này, chúng ta cần cài đặt hai mô-đun Python - reverse_geocoder, một trình mã hóa địa lý ngược ngoại tuyến đơn giản sử dụng các bảng nội bộ để chuyển đổi một tập hợp tọa độ thành một tập hợp tên thành phố và tiểu bang/tỉnh và mã quốc gia. Cài đặt cái này bằng cách nhập
from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 11 trên dòng lệnh - pycountry, một tiện ích tra cứu quốc gia mà chúng tôi sẽ sử dụng để chuyển đổi mã quốc gia thành tên tương ứng của chúng. Cài đặt cái này bằng cách nhập
from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 12 trên dòng lệnh
Khi bạn đã cài đặt các mô-đun ở trên, hãy sử dụng đoạn mã sau để chuyển đổi tọa độ ảnh thành thứ gì đó dễ nhận biết hơn from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 9Mã này sử dụng phương thức from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 13 của reverse_geocoder để chuyển đổi vĩ độ và kinh độ thập phân của mỗi ảnh thành một tập hợp các thông tin sau- Tên thành phố, thị trấn hoặc làng
- Khu vực hành chính chính, thường là một tiểu bang hoặc tỉnh
- Khu vực hành chính nhỏ, thường là một quận hoặc huyện
- Mã quốc gia
Sau đó, nó sử dụng phương pháp for index, image in enumerate(images):
print(f"Device information - Image {index}")
print("----------------------------")
print(f"Make: {image.make}")
print(f"Model: {image.model}\n") 5 của pycountry để chuyển đổi mã quốc gia được cung cấp bởi reverse_geocoder thành một bộ chứa các tên quốc gia phổ biến và chính thức tương ứngĐây là đầu ra của nó for index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 0Thông tin cảm biến hữu ích khácNhư tôi đã đề cập ở đầu bài viết này, điện thoại thông minh có rất nhiều cảm biến. Chúng bao gồm từ kế, phong vũ biểu và gia tốc kế. Khi kết hợp với GPS, các cảm biến này cung cấp thêm thông tin được thêm vào siêu dữ liệu EXIF của mỗi ảnh Camera quay về hướng nào?Từ kế cảm nhận từ trường, bao gồm cả từ trường khổng lồ do Trái đất tạo ra. Mục đích chính của nó là trở thành la bàn của điện thoại và xác định hướng mà điện thoại đang chỉ. Thông tin đó được ghi vào EXIF dưới dạng tiêu đề la bàn mỗi khi bạn chụp ảnh Hãy xác định xem tôi đang quay mặt về hướng nào khi chụp từng bức ảnh này Chúng tôi sẽ sử dụng các thuộc tính exif Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 sau đây để xác định hướng mà máy ảnh được chỉfrom exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 16. Tiêu đề la bàn (nghĩa là hướng) mà máy ảnh hướng về phía khi chụp ảnh, được biểu thị bằng độ thập phân. 0° là hướng bắc, 90° là hướng đông, 180° là hướng nam và 270° là hướng tâyfrom exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 17. Điểm tham chiếu cho from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 16. Đây có thể là from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 19, có nghĩa là 0° đề cập đến phía bắc thực hoặc địa lý, hoặc from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 20, có nghĩa là 0° đề cập đến phía bắc từ trường. Hầu hết thời gian, phía bắc thực sự được sử dụng
Mã bên dưới hiển thị hướng máy ảnh cho bốn ảnh hồ. Nó sử dụng một số chức năng tiện ích from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 21. Chức năng này chuyển đổi tiêu đề la bàn thành hướng chính (e. g. , N, NE, NNE, v.v.)from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 22. Hàm này biến giá trị trong from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 17 thành một chuỗi thân thiện với con người
for index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 1Khi bạn chạy mã, bạn sẽ thấy đầu ra này for index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 2Độ cao nơi bức ảnh được chụp là gì?Ngoài việc cung cấp tọa độ vị trí, GPS còn có thể được sử dụng để xác định độ cao. Một số điện thoại thông minh được trang bị phong vũ biểu (phát hiện áp suất không khí) mà chúng sử dụng để tăng độ chính xác của phép đo độ cao Hãy cùng tìm hiểu độ cao nơi những bức ảnh này được chụp Chúng ta sẽ sử dụng các thuộc tính này của đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 của exif để xác định độ caoChúng tôi sẽ sử dụng các thuộc tính exif Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 sau đâyfrom exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 26. Độ cao do máy ảnh báo cáo, được biểu thị bằng métfrom exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 27. Điểm tham chiếu cho from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 26. Giá trị này là from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 29, có nghĩa là giá trị trong from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 26 đề cập đến mét trên mực nước biển, hoặc from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 31, có nghĩa là giá trị trong from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 26 đề cập đến mét dưới mực nước biển
Đoạn mã sau hiển thị độ cao do điện thoại báo cáo tại thời điểm mỗi bức ảnh được chụp. Nó sử dụng một chức năng tiện ích, from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 33, xác định xem độ cao đã cho là trên hay dưới mực nước biểnfor index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 3Đây là kết quả đầu ra for index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 4Tôi có thể cho bạn biết tôi đã chụp những bức ảnh này ở đâu, nhưng bạn đã biết cách tự mình tìm hiểu Là nhiếp ảnh gia di chuyển?Điện thoại thông minh sử dụng kết hợp các vị trí GPS theo thời gian và gia tốc kế để xác định tốc độ và hướng di chuyển của điện thoại. Một số điện thoại cung cấp thông tin này như một phần của siêu dữ liệu EXIF trong ảnh Motorola One Hyper của tôi không ghi bất kỳ siêu dữ liệu nào liên quan đến tốc độ vào ảnh mà nó chụp, nhưng iPhone của tôi thì có. Dữ liệu này có thể được truy cập thông qua hai phương thức đối tượng exif Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 nàyfrom exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 35. Tốc độ do máy ảnh báo cáo, được biểu thị bằng sốfrom exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 36. Các đơn vị tốc độ được sử dụng cho giá trị trong from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 35. Giá trị này có thể là from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 38 cho kilômét trên giờ, from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 20 cho dặm trên giờ hoặc from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 04 cho hải lý trên giờ hoặc "knots"
Hãy xem xét các bức ảnh sau đây Đây là mã in ra tốc độ đã ghi tại thời điểm mỗi bức ảnh được chụp. Nó bao gồm một chức năng tiện ích, from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 41, chỉ định các đơn vị của tốc độ được báo cáofor index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 5Đây là tốc độ nó báo cáo for index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 6Cập nhật dữ liệu EXIF và lưu nóCho đến nay, chúng tôi đã giới hạn bản thân chỉ đọc siêu dữ liệu EXIF từ ảnh. Bước tiếp theo là thực hiện các thay đổi đối với dữ liệu đó và sau đó lưu kết quả dưới dạng tệp ảnh mới Cập nhật tọa độ của ảnhHãy bắt đầu với bức ảnh này Bây giờ, bạn đã biết cách đọc tọa độ của nó từ EXIF và sử dụng các tọa độ đó để mở Google Map để hiển thị vị trí mà chúng đại diện Đây là mã sẽ làm điều đó. Nó sử dụng hàm tiện ích from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 10 mà chúng tôi đã xác định trước đófor index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 7Nó xuất ra như sau for index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 8và nó mở ra một tab trình duyệt mới hiển thị Bản đồ Google hiển thị các khách sạn Swan và Dolphin, cách Walt Disney World ở Florida một đoạn đi bộ ngắn Hãy làm cho mọi thứ thú vị hơn một chút bằng cách thay đổi tọa độ được nhúng trong dữ liệu EXIF của ảnh để nó báo cáo rằng nó được chụp tại Khu vực 51. Trong trường hợp bạn chưa từng nghe về địa điểm này, thì đó là một cơ sở quân sự ở Nevada, nơi những người theo thuyết âm mưu tin rằng Hoa Kỳ. S. chính phủ lưu trữ xác của người ngoài hành tinh và một con tàu vũ trụ bị bắt vào những năm 1950. Tọa độ của nó là 37. 0° 14' 3. 6" Bắc, 115° 48' 23. 99" W Bạn đã thấy rằng việc đọc giá trị của thẻ EXIF bằng cách sử dụng đối tượng _______1 của exif chỉ đơn giản là đọc giá trị trong thuộc tính tương ứng của nó. Tương tự như vậy, việc cập nhật giá trị của nó chỉ đơn giản là gán một giá trị mới cho thuộc tính đó. Trong trường hợp này, chúng tôi sẽ chỉ định các giá trị chỉ định tọa độ của Khu vực 51 cho các thuộc tính của hình ảnh from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 01, from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 03, from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 02 và from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 06for index, image in enumerate(images):
if image.has_exif:
status = f"contains EXIF (version {image.exif_version}) information."
else:
status = "does not contain any EXIF information."
print(f"Image {index} {status}") 9Chạy mã sẽ tạo ra kết quả này Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 0và nó sẽ mở một trình duyệt mới hiển thị Google Map hiển thị Khu vực 51 Điền vào các thẻ EXIF không sử dụngCó rất nhiều thẻ được xác định trong thông số kỹ thuật EXIF hiện tại và hầu hết các máy ảnh chỉ điền vào một tập hợp con nhỏ trong số đó. Mô-đun exif cho phép điền vào bất kỳ thẻ EXIF nào không có giá trị được gán cho chúng Ghi chú. Mô-đun exif chỉ ghi vào các thẻ trong đặc tả EXIF và không ghi các thẻ bổ sung do nhà cung cấp đưa vào. Các thẻ "chính thức" trong đặc tả EXIF được gạch chân Bạn có thể gán giá trị cho thẻ bên ngoài thông số kỹ thuật EXIF, ngay cả thẻ do bạn tạo. Đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 sẽ lưu trữ giá trị đó, nhưng chỉ trong thời gian đối tượng vẫn còn trong bộ nhớ. Bạn sẽ không thể lưu các thẻ không phải EXIF hoặc các giá trị của chúng vì phương thức chuyển đổi dữ liệu trong đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 để ghi vào tệp chỉ tính đến các thẻ EXIF tiêu chuẩn
Dưới đây là một số thẻ EXIF mà bạn có thể muốn điền vào, vì chúng rất hữu ích để quản lý thư viện ảnh. Cả hai đều lấy giá trị chuỗi from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 50. Một mô tả của bức ảnh. Trong các đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 của exif, đối tượng này được hiển thị dưới dạng thuộc tính from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 52from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 53. Thông báo bản quyền cho bức ảnh. Trong các đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 của exif, đối tượng này được hiển thị dưới dạng thuộc tính from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 55
Đây là một số mã điền vào các thẻ này Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 1Chạy mã tạo ra kết quả này Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 2Lưu ảnh với dữ liệu được cập nhậtBây giờ chúng tôi đã cập nhật dữ liệu EXIF trong ảnh, hãy lưu nó dưới dạng một tệp hoàn toàn mới với tên khách sạn được cập nhật. jpg Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 3Mã này tạo một đối tượng tệp, from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 56, để ghi dữ liệu nhị phân vào một tệp có tên là khách sạn đã cập nhật. jpg. Sau đó, nó sử dụng phương pháp from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 58 của Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 để lấy dữ liệu hình ảnh khách sạn ở dạng tuần tự hóa và ghi dữ liệu đó vào tệpBây giờ bạn sẽ có một tập tin mới. cập nhật khách sạn. jpg. Hãy tải nó và xác nhận rằng dữ liệu chúng tôi đã sửa đổi và thêm vào đã được lưu Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 4Mã sẽ cung cấp cho bạn đầu ra này Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 5và nó sẽ mở một tab trình duyệt khác hiển thị Google Map of Area 51 Xóa dữ liệu EXIF và lưu ảnh “đã được quét”Giả sử rằng thay vì thay đổi dữ liệu vị trí của ảnh khách sạn, chúng tôi quyết định xóa các thẻ của nó. Có hai cách để làm điều này Cách thứ nhất là sử dụng phương thức from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 59 được cung cấp bởi đối tượng Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 của exif. Hãy sử dụng nó để xóa dữ liệu vĩ độImage 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 6Đây là đầu ra cho đoạn mã trên Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 7Cách thứ hai là sử dụng câu lệnh from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 61 của Python để xóa các đối tượng khỏi bộ nhớ. Trong trường hợp này, chúng tôi sẽ sử dụng nó để xóa các thuộc tính của from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 62 lưu trữ dữ liệu kinh độImage 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 8Đây là đầu ra cho đoạn mã trên Image 0 contains EXIF (version 0220) information.
Image 1 contains EXIF (version 0232) information. 9Bây giờ chúng tôi đã xóa dữ liệu vị trí khỏi ảnh, hãy lưu nó dưới tên tệp mới, khách sạn không có dữ liệu vị trí. jpg image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 0Cuối cùng, nếu bạn chỉ muốn xóa tất cả dữ liệu EXIF khỏi ảnh, bạn có thể sử dụng phương thức của đối tượng exif Image 0 contains 53 members:
['_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'color_space', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'digital_zoom_ratio', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_datestamp', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'has_exif', 'light_source', 'make', 'max_aperture_value', 'metering_mode', 'model', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'sensing_method', 'shutter_speed_value', 'subsec_time', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution']
Image 1 contains 68 members:
['<unknown EXIF tag 316>', '<unknown EXIF tag 322>', '<unknown EXIF tag 323>', '<unknown EXIF tag 42080>', '_exif_ifd_pointer', '_gps_ifd_pointer', '_segments', 'aperture_value', 'brightness_value', 'components_configuration', 'datetime', 'datetime_digitized', 'datetime_original', 'delete', 'delete_all', 'exif_version', 'exposure_bias_value', 'exposure_mode', 'exposure_program', 'exposure_time', 'f_number', 'flash', 'flashpix_version', 'focal_length', 'focal_length_in_35mm_film', 'get', 'get_file', 'get_thumbnail', 'gps_altitude', 'gps_altitude_ref', 'gps_dest_bearing', 'gps_dest_bearing_ref', 'gps_horizontal_positioning_error', 'gps_img_direction', 'gps_img_direction_ref', 'gps_latitude', 'gps_latitude_ref', 'gps_longitude', 'gps_longitude_ref', 'gps_speed', 'gps_speed_ref', 'has_exif', 'lens_make', 'lens_model', 'lens_specification', 'make', 'maker_note', 'metering_mode', 'model', 'offset_time', 'offset_time_digitized', 'offset_time_original', 'orientation', 'photographic_sensitivity', 'pixel_x_dimension', 'pixel_y_dimension', 'resolution_unit', 'scene_capture_type', 'scene_type', 'sensing_method', 'shutter_speed_value', 'software', 'subject_area', 'subsec_time_digitized', 'subsec_time_original', 'white_balance', 'x_resolution', 'y_resolution'] 1 đối tượng from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 64image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 1image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 2Một lần nữa, khi bạn đã sử dụng from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 64 để xóa tất cả các thẻ EXIF, bạn cần lưu những thay đổi đó. Mã bên dưới lưu hình ảnh của chúng tôi với tất cả các thẻ đã bị xóa dưới dạng khách sạn không có thẻ. jpgimage_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 3Cân nhắc thực tế và kỹ thuậtLý do xóa siêu dữ liệu EXIFSiêu dữ liệu EXIF bổ sung một cấp độ thông tin hoàn toàn mới cho ảnh kỹ thuật số và một số điều mà người dùng, nhà phát triển và tổ chức phải xem xét Một trong những cân nhắc rõ ràng là quyền riêng tư. Siêu dữ liệu GPS của một ảnh có thể cho biết vị trí của bạn vào một ngày và giờ cụ thể. Điều có giá trị hơn nhiều là GPS tổng hợp từ cuộn camera của một người nào đó, vì nó chứa các mẫu có thể được phân tích để xác định nơi họ sống, làm việc và những nơi bạn thường lui tới trong thói quen hàng ngày của họ. Đây là lý do tại sao các dịch vụ mạng xã hội uy tín hơn loại bỏ thông tin này khi bạn chia sẻ ảnh trực tuyến. Hãy nhớ rằng điều này chỉ có nghĩa là ảnh của bạn trên thư viện mạng xã hội của bạn không chứa dữ liệu GPS. Không có gì đảm bảo rằng dịch vụ không ghi lại thông tin vị trí cho mục đích khai thác dữ liệu của nhà quảng cáo trước khi xóa thông tin đó Siêu dữ liệu EXIF khác, chẳng hạn như sự kết hợp của nhà sản xuất, kiểu máy, cài đặt và thậm chí cả hướng máy ảnh ưa thích, có thể được sử dụng để liên kết một bộ ảnh với một người cụ thể Một số nhiếp ảnh gia quan tâm đến tính bí mật hơn là quyền riêng tư khi nói đến siêu dữ liệu ảnh của họ. Họ không muốn từ bỏ cài đặt máy ảnh mà họ đã sử dụng để chụp ảnh Lý do giữ lại hoặc thêm siêu dữ liệu EXIFMột trong những lý do ban đầu khiến định dạng siêu dữ liệu EXIF được phát triển là để dễ dàng tự động hóa quy trình lập danh mục, sắp xếp và tìm kiếm thông qua bộ sưu tập ảnh kỹ thuật số. EXIF cho phép tìm kiếm ảnh được chụp trong một khoảng thời gian nhất định, bằng một thiết bị nhất định hoặc tại một địa điểm nhất định. Các thẻ khác, chẳng hạn như thẻ from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 53, giúp tìm kiếm ảnh do một nhiếp ảnh gia cụ thể chụp, cũng như khẳng định bản quyền của một ngườiMặc dù thẻ from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 50 nhằm mục đích lưu trữ mô tả về hình ảnh, nhưng bạn cũng có thể sử dụng nó để lưu trữ thông tin văn bản hữu ích khác liên quan đến ảnh, chẳng hạn như thẻ để phân loại hình ảnh hoặc hướng dẫn xử lý và chỉnh sửa ảnhSiêu dữ liệu EXIF đặc biệt hữu ích trong các ứng dụng di động ghi lại sự kết hợp đồng thời của thông tin hình ảnh, ngày/giờ và vị trí. Ví dụ: một kỹ thuật viên có thể được yêu cầu chụp ảnh “trước” và “sau” về công việc sửa chữa mà họ đã thực hiện, cung cấp hồ sơ về địa điểm, thời gian và cách thức công việc được thực hiện Những thứ khác cần xem xétNhư chúng ta đã thấy trong các thẻ khác nhau được ghi bởi iPhone và thiết bị Android được sử dụng để chụp ảnh trong bài viết này, các máy ảnh khác nhau ghi các bộ thẻ EXIF khác nhau. Phần mềm chỉnh sửa ảnh thường ghi thông tin vào các thẻ khác nhau hoặc thêm các thẻ tùy chỉnh của riêng chúng. Siêu dữ liệu bổ sung này thường có thể là dấu hiệu cho thấy ảnh đã được chỉnh sửa Có một khái niệm trong chụp ảnh động vật hoang dã được gọi là Ethical EXIF, cung cấp mô tả về các tiêu chuẩn đạo đức tuân theo khi chụp ảnh. Nó bao gồm các thông tin như sức khỏe và mức độ căng thẳng của con vật trong ảnh, con vật bị nuôi nhốt trong bao lâu và liệu con vật có được vận chuyển khỏi môi trường sống của nó để chụp ảnh hay không Cuối cùng, có các thông báo mà các ứng dụng dành cho thiết bị di động sử dụng máy ảnh hiển thị khi sử dụng lần đầu. Họ thường nói điều gì đó dọc theo dòng “Ứng dụng này sử dụng máy ảnh. Điều đó ổn với bạn chứ?”, nhưng hầu hết trong số họ không nói rõ rằng máy ảnh sẽ thêm vị trí và siêu dữ liệu khác vào mỗi bức ảnh mà nó chụp. Nếu bạn viết ứng dụng dành cho thiết bị di động sử dụng máy ảnh, bạn có thể muốn thông báo cho người dùng về điều này Bảo mật API Python với Auth0Bảo mật API Python bằng Auth0 rất dễ dàng và mang lại nhiều tính năng tuyệt vời cho bảng. Với Auth0, chúng ta chỉ cần viết vài dòng code để lấy - Một giải pháp quản lý danh tính vững chắc, bao gồm đăng nhập một lần
- quản lý người dùng
- Hỗ trợ cho các nhà cung cấp nhận dạng xã hội (như Facebook, GitHub, Twitter, v.v. )
- Nhà cung cấp nhận dạng doanh nghiệp (Active Directory, LDAP, SAML, v.v. )
- Cơ sở dữ liệu riêng của chúng tôi về người dùng
Ví dụ: để bảo mật các API Python được viết bằng Flask, chúng ta chỉ cần tạo một trình trang trí from exif import Image
with open("./images/palm tree 1.jpg", "rb") as palm_1_file:
palm_1_image = Image(palm_1_file)
with open("./images/palm tree 2.jpg", "rb") as palm_2_file:
palm_2_image = Image(palm_2_file)
images = [palm_1_image, palm_2_image] 68image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 4Sau đó, sử dụng nó trong các điểm cuối của chúng tôi image_members = []
for image in images:
image_members.append(dir(image))
for index, image_member_list in enumerate(image_members):
print(f"Image {index} contains {len(image_member_list)} members:")
print(f"{image_member_list}\n") 5Để tìm hiểu thêm về cách bảo mật API Python bằng Auth0, hãy xem hướng dẫn này. Cùng với các hướng dẫn về công nghệ phụ trợ (như Python, Java và PHP), trang web Tài liệu Auth0 cũng cung cấp các hướng dẫn cho ứng dụng Di động/Gốc và ứng dụng Trang đơn
Làm cách nào để trích xuất siêu dữ liệu từ hình ảnh bằng Python?
Triển khai. . Nhập mô-đun Tải hình ảnh và giải nén dữ liệu exif Chuyển đổi id thẻ exif (được biểu thị bằng tagid trong mã) thành dạng có thể đọc được của con người được biểu thị bằng tên thẻ trong mã và nhận giá trị tương ứng của nó
Làm cách nào để lấy dữ liệu hình ảnh trong Python?
Quy trình trích xuất là. . nhập mô-đun Hình ảnh của PIL vào trình bao. >>> từ hình ảnh nhập PIL tạo một đối tượng hình ảnh và mở hình ảnh ở chế độ đọc. >>> im = Hình ảnh. mở ('tệp của tôi. png', 'r'). chúng tôi sử dụng một chức năng của mô-đun Hình ảnh được gọi là getdata () để trích xuất các giá trị pixel
Tôi có thể tìm các thuộc tính ảnh ở đâu?
Bạn có thể xem thông tin cơ bản như kiểu ảnh, cũng như kích thước, kích thước và độ phân giải của nó. . Mở Google Ảnh Tìm ảnh bạn muốn xem siêu dữ liệu và nhấn vào ảnh đó Nhấn vào ba dấu chấm ở góc trên bên phải màn hình của bạn Đi xuống “Chi tiết. ”
Làm cách nào tôi có thể tìm thấy chi tiết của một hình ảnh?
Xem dữ liệu EXIF trong Windows thật dễ dàng. Chỉ cần nhấp chuột phải vào ảnh liên quan và chọn “Thuộc tính”. Nhấp vào tab “Chi tiết” và cuộn xuống —bạn sẽ thấy tất cả các loại thông tin về máy ảnh được sử dụng và cài đặt mà ảnh được chụp. |