python模組之imghdr檢測圖片類型

來源:互聯網
上載者:User

標籤:傳回值   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檢測圖片類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.