2011-01-21 46 views
68

Tôi đang sử dụng PIL. Làm cách nào để biến dữ liệu EXIF ​​thành từ điển của công cụ?Trong Python, làm cách nào để đọc dữ liệu exif cho một hình ảnh?

+0

Câu hỏi gần đây hơn tại đây: http://stackoverflow.com/questions/14009148/exif-reading-library –

+1

Xem câu trả lời ở đây: http://stackoverflow.com/questions/765396/exif-manipulation-library-for-python –

+0

http://tilloy.net/dev/pyexiv2/tutorial.html Đây là cách dễ nhất và toàn diện nhất. –

Trả lời

108

Hãy thử điều này:

import PIL.Image 
img = PIL.Image.open('img.jpg') 
exif_data = img._getexif() 

này sẽ cho bạn một cuốn từ điển được lập chỉ mục bởi EXIF ​​thẻ số. Nếu bạn muốn từ điển chỉ mục bởi các EXIF ​​tên thẻ chuỗi thực tế, hãy thử một cái gì đó như:

import PIL.ExifTags 
exif = { 
    PIL.ExifTags.TAGS[k]: v 
    for k, v in img._getexif().items() 
    if k in PIL.ExifTags.TAGS 
} 
+5

Bất kỳ thay thế Python 3 nào? –

+0

Python 2.7.2: Đối tượng 'AttributeError: 'module' không có thuộc tính 'ExifTags'' – 2rs2ts

+2

@ 2rs2ts: Thử' import ExifTags' (không có tiền tố 'PIL'). –

20

Bạn cũng có thể sử dụng ExifRead mô-đun:

import exifread 
# Open image file for reading (binary mode) 
f = open(path_name, 'rb') 

# Return Exif tags 
tags = exifread.process_file(f) 
+0

Bạn có thể kiểm tra điều này trên Câu hỏi này, tải xuống hình ảnh và thử lấy ImageDescription không. http://stackoverflow.com/questions/22173902/how-to-get-image-title-in-python-django – Clayton

+1

@Clayton cho cả hình ảnh, exifread trả về từ điển trống. Nhưng tôi đã thử nghiệm trên các bức ảnh của tôi và nó hoạt động tốt. – tnq177

11

tôi sử dụng này:

import os,sys 
from PIL import Image 
from PIL.ExifTags import TAGS 

for (k,v) in Image.open(sys.argv[1])._getexif().iteritems(): 
     print '%s = %s' % (TAGS.get(k), v) 

hoặc để có một trường cụ thể:

def get_field (exif,field) : 
    for (k,v) in exif.iteritems(): 
    if TAGS.get(k) == field: 
     return v 

exif = image._getexif() 
print get_field(exif,'ExposureTime') 
+5

Tốt hơn, bạn có thể đảo ngược TAGS bằng 'name2tagnum = dict ((tên, num) cho num, tên trong TAGS.iteritems())' và sau đó làm 'name2tagnum ['ExposureTime']'. – Ben

+0

Đối với Python 3, thay đổi 'exif.iteritems()' thành 'exif.items()' – SPRBRN

Các vấn đề liên quan