? 今天元宵節,一位版主在論壇發了一篇元宵節祝福帖子,一大早就有用戶報障說帖子中有張圖片在iOS端看不了,安卓手機正常,第一反應是圖片格式問題,用Safari打開也看不了,回到公司證實了是一張webp格式圖片,最后將其轉換成jpg格式發給了用戶重新上傳替換。
下圖后綴名為jpg,實際是webp格式圖片,在谷歌系瀏覽器上才顯示正常,Safari瀏覽器無法顯示
上圖為轉換后的圖片,webp格式圖片簡書無法上傳
webp格式原圖鏈接
一、什么是EXIF
? 可交換圖像文件格式常被簡稱為Exif(Exchangeable image file format),是專門為數碼相機的照片設定的,可以記錄數碼照片的屬性信息和拍攝數據。Exif 可以被附加在 JPEG、TIFF、RIFF 等文件之中,為其增加有關數碼相機拍攝信息的內容和縮略圖或圖像處理軟件的一些版本信息。
了解更多:維基百科
EXIF在線查看
圖蟲EXIF查看器alpha版
exif-viewer
get-metadata (支持圖片、其它文件)
http://exif.regex.info/exif.cgi 支持URL鏈接
以上幾個是使用過的對圖片EXIF解析支持最好的,網上的一些工具會解析失敗。
二、Exiftool使用
一)為什么使用Exiftool
-
exiftool
是經過測試發現對圖片EXIF信息解析支持是最好的(如果有更好的請補充) -
exiftool
支持圖片EXIF信息查詢,修改及批量操作,還支持其它文件的EXIF操作。 - 安全隱私問題,因為經常有網上暴露圖片隱私問題,使用在線需要上傳到服務器。采用
exiftool
保證了圖片的安全和隱私,顯然是最適合的。
? 我們知道文件后綴名并不能代表文件的類型格式,比如上圖webp格式后綴名是jpg,換言之一張jpg后綴名圖片可能不是jpg圖片,可能是web
,png
,text
或其它類型文件。那么怎么快速了解它是哪種類型文件并獲取它的一些其它信息呢,這時exiftool
就派上用場了,試了下其它幾個Exif工具,也用Mac/iOS原生代碼測試了下,發現不能有效的讀取jpg后綴的webp圖片,而exiftool能很好支持。注意并非每一張圖片都包含 exif 信息,像微信朋友圈如果發表的不是原圖就沒有。
二)Exiftool安裝與使用
1、exiftool安裝
$ brew install exiftool
或直接下載:https://sno.phy.queensu.ca/~phil/exiftool/
2、查看EXIF信息
$ exiftool photo.jpg #默認顯示所有的信息 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 #查看使用詳細列表
使用幫助,可看到所有命令幫助,也可看到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、查詢相關命令
$cd /Users/apple/Desktop
exiftool photo.jpg #查看所有信息
exiftool -a -u -g1 photo.jpg #查看所有元信息,包括重復和未知標簽,并按小組排列
exiftool -s -ImageSize -ExposureTime photo.jpg #查看圖片尺寸
exiftool -common dir #查看dir目錄文件信息(不僅僅是圖片)
exiftool -l c.jpg d.jpg #從兩個圖像文件打印所有信息。
exiftool -l -canon c.jpg d.jpg #從兩個圖像文件打印標準的佳能信息。
5、寫入編輯命令
更改創建和修改時間
$ exiftool -gps:all= photo.jpg #有些相機會記錄拍照時的GPS定位信息。如果你不希望別人看到使用該命令刪除gps信息
$ exiftool -all= photo.jpg #刪除所有信息
$ exiftool -all= --exif:all photo.jpg #刪除EXIF以外的所有信息
寫入標簽
$ exiftool -artist=標簽名稱 photo.jpg #寫入藝術家標簽
$ exiftool -artist=標簽名稱 a.jpg b.jpg c.jpg #寫多個文件
$ exiftool -artist=標簽名稱 /exiftoolTest #寫在一個目錄的所有文件 exiftoolTest為文件夾
其它:
exiftool -Comment ='這是一個新的評論'dst.jpg
向JPG圖片寫入新評論(取代任何現有評論)。
exiftool -comment = -o newdir -ext jpg。
刪除當前目錄中所有JPG圖像的評論,
將修改后的圖像寫入新目錄。
exiftool -keywords = EXIF -keywords =編輯器dst.jpg
用兩個新的關鍵字(“EXIF”和。)替換現有的關鍵字列表
“編輯”)。
exiftool -Keywords + =單詞-o newfile.jpg src.jpg
將源圖像復制到新文件,然后添加關鍵字(“單詞”)
當前關鍵字列表。
exiftool -credit- = xxx dir
從一個目錄中的所有文件中刪除信用信息,信用值是“xxx”。
exiftool -all = dst.jpg
從圖像中刪除所有元信息。注意:你不應該
對RAW圖像(DNG除外)進行處理,因為它是專有的RAW圖像
格式通常包含制造注釋中的信息
轉換圖像所必需的。
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
從指定的文件中設置縮略圖(注意:引號是
以防止外殼重定向)。
exiftool'-JpgFromRaw <=%d%f_JFR.JPG'-ext NEF -r。
遞歸地寫入以“_JFR.JPG”結尾的文件名的JPEG圖像
添加到擴展名為“.NEF”的類似文件的JpgFromRaw標記中
當前目錄。 (這是“-JpgFromRaw”的倒數
上面的“READING EXAMPLES”部分的命令)。
exiftool -DateTimeOriginal - ='0:0:0 1:30:0'dir
調整目錄“dir”中所有圖像的原始日期/時間
減去1小時30分鐘。 (這相當于
“-DateTimeOriginal- = 1.5”。請參閱Image :: ExifTool :: Shift.pl
細節。)
exiftool -createdate + = 3 -modifydate + = 3 a.jpg b.jpg
向兩個CreateDate和ModifyDate時間戳添加3個小時
圖片。
exiftool -AllDates + = 1:30 -if'$ make eq“Canon”'dir
移動DateTimeOriginal,CreateDate和ModifyDate的值
將所有佳能影像轉換1小時30分鐘
目錄。 (AllDates標簽作為這些的快捷方式提供
三個標簽,允許他們通過一個標簽訪問。)
exiftool -xmp:city = Kingston image1.jpg image2.nef
將標簽寫入兩個圖像的XMP組。 (沒有“xmp:”
自從“City”存在以后,該標簽將被寫入IPTC組
在這兩種情況下,IPTC默認是首選。)
exiftool -LightSource - ='未知(0)'dst.tiff
只有在值為0時才刪除“LightSource”標簽。
exiftool -whitebalance- = auto -WhiteBalance = tung dst.jpg
只有之前為“自動”時,才將“WhiteBalance”設置為“Tungsten”。
exiftool -comment- = -comment ='新評論'a.jpg
只有當圖片還沒有時才寫新評論。
exiftool -o%d%f.xmp目錄
為“dir”中的所有圖像創建XMP元信息數據文件。
exiftool -o test.xmp -owner = Phil -title ='XMP File'
僅從命令中定義的標簽創建XMP數據文件
線。
更多命令查看exiftool -h
http://owl.phy.queensu.ca/~phil/exiftool/examples.html
6、使用ExifTool批量處理EXIF信息
如果要處理的文件太多,一張一張處理效率太低,ExifTool支持批量操作:
$ exiftool -artist=標簽名稱 /dirName #批量寫入dirName目錄藝術家標簽
$ exiftool -r -all= /dirName #批量刪除dirName及其子目錄所有文件EXIF信息,-r表示遞歸處理子目錄
$ exiftool -gps:all= /dirName #批量刪除dirName及其子目錄所有文件gps信息
其它相關:
$ mdls photo.jpg #這個命令顯示指定文件的metadata的屬性,當不能準確的獲取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
測試發現,如果是網絡webp圖片,如果后綴是jpg或png不能準確獲取Exif信息,系統相冊沒問題。
參考:
http://owl.phy.queensu.ca/~phil/exiftool/examples.html
https://zh.wikipedia.org/wiki/EXIF
https://baike.baidu.com/item/EXIF/422825