Siêu dữ liệu là “dữ liệu cung cấp thông tin về dữ liệu khác”. Nói một cách đơn giản Dữ liệu về dữ liệu là Siêu dữ liệu. Siêu dữ liệu có nhiều mục đích khác nhau. Nó giúp người dùng tìm thông tin liên quan và khám phá tài nguyên “Bất kỳ hệ thống nào cũng chỉ tốt khi siêu dữ liệu mà nó nhập vào. ” - Chris Bulock
Tôi hy vọng thuật ngữ siêu dữ liệu hiện đã rõ ràng, Bây giờ đến phần Siêu dữ liệu hình ảnh…Một lượng đáng kể dữ liệu ẩn được ghi lại bất cứ khi nào bạn chụp ảnh bằng máy ảnh kỹ thuật số hoặc điện thoại thông minh Siêu dữ liệu ảnh là một tập hợp dữ liệu mô tả và cung cấp thông tin về quyền và quản lý ảnh. Dữ liệu này còn được gọi là siêu dữ liệu EXIF Đây là một ví dụ về siêu dữ liệu hình ảnh trông như thế nào 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 đố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 đối tượng đó có các 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 thuộc EXIF của lớp _______12_______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ớpMô 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. ________29 ______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ị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'] 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 vào các phiên bản hệ điều hành và ống kí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 các 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 nó 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 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 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 hướng 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° chỉ hướng bắc từ tính. 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, 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. Đơ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ị Google Map 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 sử dụng đối tượng _______12_______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ẽ gán các giá trị xác đị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 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 ai đó, 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 địa điểm bạn thường xuyên lui tới hàng ngày. Đâ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, cho phé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 để đọc dữ liệu từ hình ảnh trong Python?
Python-tesseract là công cụ nhận dạng ký tự quang học (OCR) dành cho python . Tức là nó sẽ nhận dạng và “đọc” chữ nhúng trong hình ảnh. Python-tesseract là một trình bao bọc cho Công cụ Tesseract-OCR của Google.
Làm cách nào để trích xuất dữ liệu EXIF từ hình ảnh Python?
Lấy dữ liệu exif
. print(img. getexif()) Đầu ra. {34665. 210, 36864. b'0220', 37121. b'\x01\x02\x03\x00', 37377. 9. 884, 36867. '2021. 11. 28 12. 35. 52',. . . . } Đoạn mã trên sẽ xuất dữ liệu exif dưới dạng từ điển với khóa tương ứng với từng mục siêu dữ liệu từ TAGS làm khóa.
Bạn có thể tìm kiếm hình ảnh bằng siêu dữ liệu không?
Trên thực tế, công cụ tìm kiếm hình ảnh siêu dữ liệu chỉ khác một chút so với công cụ tìm kiếm văn bản được đề cập ở trên. Tìm kiếm bằng công cụ tìm kiếm hình ảnh siêu dữ liệu hiếm khi kiểm tra chính hình ảnh thực tế. Thay vào đó, nó dựa vào các đầu mối văn bản . |