圖片的exif文件格式中保存了很多信息,比如GPS經(jīng)緯度,,高度,,焦距等信息。
在圖片的屬性中可以看到這些信息:
我們可以使用python來(lái)進(jìn)行exif數(shù)據(jù)的讀取和保存,。
1. 首先安裝piexif
pip3 install piexif
2.exif數(shù)據(jù)讀取代碼
import piexif from PIL import Image # Read Image fname = './1.JPG' img = Image.open(fname) exif_dict = piexif.load(img.info['exif']) # Read exif data longitude = exif_dict['GPS'][piexif.GPSIFD.GPSLongitude] latitude = exif_dict['GPS'][piexif.GPSIFD.GPSLatitude] altitude = exif_dict['GPS'][piexif.GPSIFD.GPSAltitude] focal_length = exif_dict['Exif'][piexif.ExifIFD.FocalLength] print('longitude:', longitude) print('latitude:', latitude) print('altitude:', altitude) print('focal length:', focal_length)
數(shù)據(jù)輸出如下:
longitude: ((117, 1), (17, 1), (532029, 10000))
latitude: ((31, 1), (43, 1), (299847, 10000))
altitude: (44783, 1000)
focal length: (880, 100)
PS:exif數(shù)據(jù)用的是分?jǐn)?shù)格式和度分秒格式,。
比如 ((117, 1), (17, 1), (532029, 10000))的含義是117/1度17/1分532029/10000秒,即117°17′53.2029″,。
(44783, 1000)的含義是44783/1000,,即44.783。
3.exif數(shù)據(jù)修改與保存代碼
# Modify exif data exif_dict['GPS'][piexif.GPSIFD.GPSLongitude] = ((180, 1), (17, 1), (532029, 10000)) # Save image with modified exif data exif_bytes = piexif.dump(exif_dict) img.save('1_copy.JPG', exif=exif_bytes)
我在項(xiàng)目中遇到的一個(gè)需求:
無(wú)人機(jī)航拍圖像分辨率太大,需要對(duì)圖像進(jìn)行縮放,,同時(shí)保留GPS數(shù)據(jù)(因?yàn)楹罄m(xù)算法需要GPS數(shù)據(jù)),。
如果用opencv來(lái)resize圖片再imwrite的話,會(huì)丟失GPS信息,,不可行,。可用如下的代碼:
import piexif from PIL import Image # Read Image fname = './DJI_0001.JPG' img = Image.open(fname) exif_dict = piexif.load(img.info['exif']) # Resize image resize_img = img.resize((1920, 1080), Image.ANTIALIAS) # Save resized image with original exif data exif_bytes = piexif.dump(exif_dict) resize_img.save('1_copy.JPG', exif=exif_bytes)