標籤:傳回值 link auto false www. www 格式 es2017 並儲存
1. imghdr是什麼
imghdr是一個用來檢測圖片類型的模組,傳遞給它的可以是一個檔案對象,也可以是一個位元組流。
能夠支援的圖片格式:
2. 如何使用
提供了一個api叫做imghdr.what,這個方法接受兩個參數,第一個參數是一個檔案對象,第二個參數是一個位元組流數組。
檔案對象用來對本地檔案做檢測,位元組流用來對網路上的做檢測。
當需要對檔案進行檢測的時候只傳入第一個參數即可。
當需要對一個位元組流檢測的時候第一個參數傳None,第二個參數傳入位元組流即可,當第二個參數被指定的時候第一個參數就會被忽略掉了所以值是什麼無所謂
其傳回值是一個字串,是上面表格中的一個,表示檢測到的此圖片的類型。
2.1 對檔案做檢測:對磁碟檔案檢測
只傳第一個參數的時候通常是對已經儲存在本地磁碟上的檔案檢測一下格式,一個簡單的例子如下:
#! /usr/bin/pythonimport imghdrif __name__ == ‘__main__‘: # 檢測一個檔案 with open(‘D:/foo.jpg‘, ‘rb‘) as img_file: print(imghdr.what(img_file))
輸出:
jpeg
2.2 對流做檢測:在爬蟲中的應用
在寫爬蟲的時候如果爬取圖片的話,在儲存的時候我們需要知道圖片的格式,不然gif的儲存為了png什麼的就動不起來了,但是有一些圖片的格式是不太容易由url中識別出來的,比如有些圖片的url是這個樣子的:
http://www.foo.com/bar.png?foo=bar
像這種要做尾碼截取的話需要考慮很多情況,搞很多用例來測試,有點得不償失啊,所以這個時候imghdr就派上用場了。
這是一個簡單的爬取圖片檢測尾碼格式的例子:
#! /usr/bin/pythonimport imghdrimport urllib3import uuidclass Spider: """ 蜘蛛俠,爬爬爬 """ pool_manager = urllib3.PoolManager() @staticmethod def get(url): return Spider.pool_manager.urlopen(‘GET‘, url)class ImageDownLoader: """ 圖片下載器 """ @staticmethod def download(url, path): """ 這個方法用來下載圖片並儲存 :param url: 圖片的路徑 :param path: 要儲存到的路徑 :return: """ response = Spider.get(url) save_name = path + uuid.uuid1().hex + "." + imghdr.what(None, response.data) with open(save_name, ‘wb‘) as img_file: img_file.write(response.data)if __name__ == ‘__main__‘: ImageDownLoader.download(‘http://img3.doubanio.com/view/photo/albumcover/public/p2327732376.webp‘, ‘D:/‘)
參考資料:
1. https://docs.python.org/3.6/library/imghdr.html
python模組之imghdr檢測圖片類型