? 今天元宵節(jié)一罩,一位版主在論壇發(fā)了一篇元宵節(jié)祝福帖子,一大早就有用戶報障說帖子中有張圖片在iOS端看不了撇簿,安卓手機(jī)正常聂渊,第一反應(yīng)是圖片格式問題差购,用Safari打開也看不了,回到公司證實(shí)了是一張webp格式圖片,最后將其轉(zhuǎn)換成jpg格式發(fā)給了用戶重新上傳替換悼沿。
下圖后綴名為jpg鸠项,實(shí)際是webp格式圖片,在谷歌系瀏覽器上才顯示正常稳析,Safari瀏覽器無法顯示
上圖為轉(zhuǎn)換后的圖片,webp格式圖片簡書無法上傳
webp格式原圖鏈接
一弓叛、什么是EXIF
? 可交換圖像文件格式常被簡稱為Exif(Exchangeable image file format)彰居,是專門為數(shù)碼相機(jī)的照片設(shè)定的,可以記錄數(shù)碼照片的屬性信息和拍攝數(shù)據(jù)撰筷。Exif 可以被附加在 JPEG陈惰、TIFF、RIFF 等文件之中毕籽,為其增加有關(guān)數(shù)碼相機(jī)拍攝信息的內(nèi)容和縮略圖或圖像處理軟件的一些版本信息抬闯。
了解更多:維基百科
EXIF在線查看
圖蟲EXIF查看器alpha版
exif-viewer
get-metadata (支持圖片、其它文件)
http://exif.regex.info/exif.cgi 支持URL鏈接
以上幾個是使用過的對圖片EXIF解析支持最好的关筒,網(wǎng)上的一些工具會解析失敗溶握。
二、Exiftool使用
一)為什么使用Exiftool
-
exiftool
是經(jīng)過測試發(fā)現(xiàn)對圖片EXIF信息解析支持是最好的(如果有更好的請補(bǔ)充) -
exiftool
支持圖片EXIF信息查詢平委,修改及批量操作奈虾,還支持其它文件的EXIF操作。 - 安全隱私問題廉赔,因?yàn)榻?jīng)常有網(wǎng)上暴露圖片隱私問題肉微,使用在線需要上傳到服務(wù)器。采用
exiftool
保證了圖片的安全和隱私蜡塌,顯然是最適合的碉纳。
? 我們知道文件后綴名并不能代表文件的類型格式,比如上圖webp格式后綴名是jpg馏艾,換言之一張jpg后綴名圖片可能不是jpg圖片劳曹,可能是web
,png
琅摩,text
或其它類型文件铁孵。那么怎么快速了解它是哪種類型文件并獲取它的一些其它信息呢,這時exiftool
就派上用場了房资,試了下其它幾個Exif工具蜕劝,也用Mac/iOS原生代碼測試了下,發(fā)現(xiàn)不能有效的讀取jpg后綴的webp圖片,而exiftool能很好支持岖沛。注意并非每一張圖片都包含 exif 信息暑始,像微信朋友圈如果發(fā)表的不是原圖就沒有。
二)Exiftool安裝與使用
1婴削、exiftool安裝
$ brew install exiftool
或直接下載:https://sno.phy.queensu.ca/~phil/exiftool/
2廊镜、查看EXIF信息
$ exiftool photo.jpg #默認(rèn)顯示所有的信息 exiftool+圖片路徑/圖片名.jpg
輸出信息如下:
#$ ExifTool /Users/apple/Desktop/photo.jpg
ExifTool Version Number : 10.80
File Name : photo.jpg
Directory : /Users/pconline/Desktop
File Size : 18 kB
File Modification Date/Time : 2018:03:02 10:22:03+08:00
File Access Date/Time : 2018:03:02 11:47:58+08:00
File Inode Change Date/Time : 2018:03:02 11:47:57+08:00
File Permissions : rw-r--r--
File Type : WEBP
File Type Extension : webp
MIME Type : image/webp
VP8 Version : 0 (bicubic reconstruction, normal loop)
Image Width : 640
Horizontal Scale : 0
Image Height : 400
Vertical Scale : 0
Image Size : 640x400
Megapixels : 0.256
從打印信息我們可以看到,圖片photo.jpg雖然后綴名是jpg唉俗,但File Type則是WEBP
3嗤朴、Exiftool常用命令示例
終端輸入
$ exiftool -h #查看使用詳細(xì)列表
使用幫助,可看到所有命令幫助互躬,也可看到exiftool的支持文件類型和文件元信息如下:
File Types
----------------------+----------------------+---------------------
3G2 r/w | DVB r/w | JPEG r/w | ODT r | RIFF r
....
Meta Information
----------------------+----------------------+---------------------
EXIF r/w/c | CIFF r/w | Ricoh RMETA r
GPS r/w/c | AFCP r/w | Picture Info r
IPTC r/w/c | Kodak Meta r/w | Adobe APP14 r
XMP r/w/c | FotoStation r/w | MPF r
MakerNotes r/w/c | PhotoMechanic r/w | Stim r
Photoshop IRB r/w/c | JPEG 2000 r | DPX r
ICC Profile r/w/c | DICOM r | APE r
MIE r/w/c | Flash r | Vorbis r
JFIF r/w/c | FlashPix r | SPIFF r
Ducky APP12 r/w/c | QuickTime r | DjVu r
PDF r/w/c | Matroska r | M2TS r
PNG r/w/c | MXF r | PE/COFF r
Canon VRD r/w/c | PrintIM r | AVCHD r
Nikon Capture r/w/c | FLAC r | ZIP r
GeoTIFF r/w/c | ID3 r | (and more)
4播赁、查詢相關(guān)命令
$cd /Users/apple/Desktop
exiftool photo.jpg #查看所有信息
exiftool -a -u -g1 photo.jpg #查看所有元信息,包括重復(fù)和未知標(biāo)簽吼渡,并按小組排列
exiftool -s -ImageSize -ExposureTime photo.jpg #查看圖片尺寸
exiftool -common dir #查看dir目錄文件信息(不僅僅是圖片)
exiftool -l c.jpg d.jpg #從兩個圖像文件打印所有信息。
exiftool -l -canon c.jpg d.jpg #從兩個圖像文件打印標(biāo)準(zhǔn)的佳能信息乓序。
5寺酪、寫入編輯命令
更改創(chuàng)建和修改時間
$ exiftool -gps:all= photo.jpg #有些相機(jī)會記錄拍照時的GPS定位信息。如果你不希望別人看到使用該命令刪除gps信息
$ exiftool -all= photo.jpg #刪除所有信息
$ exiftool -all= --exif:all photo.jpg #刪除EXIF以外的所有信息
寫入標(biāo)簽
$ exiftool -artist=標(biāo)簽名稱 photo.jpg #寫入藝術(shù)家標(biāo)簽
$ exiftool -artist=標(biāo)簽名稱 a.jpg b.jpg c.jpg #寫多個文件
$ exiftool -artist=標(biāo)簽名稱 /exiftoolTest #寫在一個目錄的所有文件 exiftoolTest為文件夾
其它:
exiftool -Comment ='這是一個新的評論'dst.jpg
向JPG圖片寫入新評論(取代任何現(xiàn)有評論)替劈。
exiftool -comment = -o newdir -ext jpg寄雀。
刪除當(dāng)前目錄中所有JPG圖像的評論,
將修改后的圖像寫入新目錄陨献。
exiftool -keywords = EXIF -keywords =編輯器dst.jpg
用兩個新的關(guān)鍵字(“EXIF”和盒犹。)替換現(xiàn)有的關(guān)鍵字列表
“編輯”)。
exiftool -Keywords + =單詞-o newfile.jpg src.jpg
將源圖像復(fù)制到新文件眨业,然后添加關(guān)鍵字(“單詞”)
當(dāng)前關(guān)鍵字列表急膀。
exiftool -credit- = xxx dir
從一個目錄中的所有文件中刪除信用信息,信用值是“xxx”龄捡。
exiftool -all = dst.jpg
從圖像中刪除所有元信息卓嫂。注意:你不應(yīng)該
對RAW圖像(DNG除外)進(jìn)行處理,因?yàn)樗菍S械腞AW圖像
格式通常包含制造注釋中的信息
轉(zhuǎn)換圖像所必需的聘殖。
exiftool -all = -comment ='寂寞'dst.jpg
刪除圖像中的所有元信息并添加評論
(注意順序很重要:“-comment ='lonely'-all =”
也會刪除新評論晨雳。)
exiftool -all = --jfif:全部dst.jpg
從圖像中刪除除JFIF組以外的所有元信息。
exiftool -Photoshop:全部= dst.jpg
從圖像中刪除Photoshop元信息(注意
Photoshop信息還包括IPTC)奸腺。
exiftool -r -XMP-crss:all = DIR
遞歸刪除a中的圖像中的所有XMP-crss信息
目錄餐禁。
exiftool'-ThumbnailImage <= thumb.jpg'dst.jpg
從指定的文件中設(shè)置縮略圖(注意:引號是
以防止外殼重定向)。
exiftool'-JpgFromRaw <=%d%f_JFR.JPG'-ext NEF -r突照。
遞歸地寫入以“_JFR.JPG”結(jié)尾的文件名的JPEG圖像
添加到擴(kuò)展名為“.NEF”的類似文件的JpgFromRaw標(biāo)記中
當(dāng)前目錄帮非。 (這是“-JpgFromRaw”的倒數(shù)
上面的“READING EXAMPLES”部分的命令)。
exiftool -DateTimeOriginal - ='0:0:0 1:30:0'dir
調(diào)整目錄“dir”中所有圖像的原始日期/時間
減去1小時30分鐘。 (這相當(dāng)于
“-DateTimeOriginal- = 1.5”喜鼓。請參閱Image :: ExifTool :: Shift.pl
細(xì)節(jié)副砍。)
exiftool -createdate + = 3 -modifydate + = 3 a.jpg b.jpg
向兩個CreateDate和ModifyDate時間戳添加3個小時
圖片。
exiftool -AllDates + = 1:30 -if'$ make eq“Canon”'dir
移動DateTimeOriginal庄岖,CreateDate和ModifyDate的值
將所有佳能影像轉(zhuǎn)換1小時30分鐘
目錄豁翎。 (AllDates標(biāo)簽作為這些的快捷方式提供
三個標(biāo)簽,允許他們通過一個標(biāo)簽訪問隅忿。)
exiftool -xmp:city = Kingston image1.jpg image2.nef
將標(biāo)簽寫入兩個圖像的XMP組心剥。 (沒有“xmp:”
自從“City”存在以后,該標(biāo)簽將被寫入IPTC組
在這兩種情況下背桐,IPTC默認(rèn)是首選优烧。)
exiftool -LightSource - ='未知(0)'dst.tiff
只有在值為0時才刪除“LightSource”標(biāo)簽。
exiftool -whitebalance- = auto -WhiteBalance = tung dst.jpg
只有之前為“自動”時链峭,才將“WhiteBalance”設(shè)置為“Tungsten”畦娄。
exiftool -comment- = -comment ='新評論'a.jpg
只有當(dāng)圖片還沒有時才寫新評論。
exiftool -o%d%f.xmp目錄
為“dir”中的所有圖像創(chuàng)建XMP元信息數(shù)據(jù)文件弊仪。
exiftool -o test.xmp -owner = Phil -title ='XMP File'
僅從命令中定義的標(biāo)簽創(chuàng)建XMP數(shù)據(jù)文件
線熙卡。
更多命令查看exiftool -h
http://owl.phy.queensu.ca/~phil/exiftool/examples.html
6、使用ExifTool批量處理EXIF信息
如果要處理的文件太多励饵,一張一張?zhí)幚硇侍筒蛋珽xifTool支持批量操作:
$ exiftool -artist=標(biāo)簽名稱 /dirName #批量寫入dirName目錄藝術(shù)家標(biāo)簽
$ exiftool -r -all= /dirName #批量刪除dirName及其子目錄所有文件EXIF信息,-r表示遞歸處理子目錄
$ exiftool -gps:all= /dirName #批量刪除dirName及其子目錄所有文件gps信息
其它相關(guān):
$ mdls photo.jpg #這個命令顯示指定文件的metadata的屬性,當(dāng)不能準(zhǔn)確的獲取exif信息
iOS端獲取metadata
https://stackoverflow.com/questions/9766394/get-exif-data-from-uiimage-uiimagepickercontroller
https://stackoverflow.com/questions/16830180/how-to-get-exif-data-from-downloaded-image
測試發(fā)現(xiàn)役听,如果是網(wǎng)絡(luò)webp圖片,如果后綴是jpg或png不能準(zhǔn)確獲取Exif信息颓鲜,系統(tǒng)相冊沒問題。
參考:
http://owl.phy.queensu.ca/~phil/exiftool/examples.html
https://zh.wikipedia.org/wiki/EXIF
https://baike.baidu.com/item/EXIF/422825