欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python用imghdr模塊識別圖片格式實例解析

 更新時間:2018年01月11日 11:44:38   作者:GanZiQim  
這篇文章主要介紹了Python用imghdr模塊識別圖片格式實例解析,具有一定借鑒價值,需要的朋友可以參考下

imghdr模塊

功能描述:imghdr模塊用于識別圖片的格式。它通過檢測文件的前幾個字節(jié),從而判斷圖片的格式。

唯一一個API

imghdr.what(file, h=None)

第一個參數(shù)file可以是用rb模式打開的file對象或者表示路徑的字符串和PathLike對象。h參數(shù)是一段字節(jié)串。函數(shù)返回表示圖片格式的字符串。

>>> import imghdr
>>> imghdr.what('test.jpg')
'jpeg'

具體的返回值和描述如下:

返回值 描述 檢測方式
jpeg 用JFIF或者Exif格式保存的JPEG圖片 第7到第10個字節(jié)是b'JFIF'或者b'Exif'
png 可移植網(wǎng)絡(luò)圖形格式(Portable Network Graphic Format) 以字節(jié)串b'\x89PNG\r\n\x1a\n'開頭
gif GIF(Graphics Interchange Format)的87版本和89版本 前6個字節(jié)為b'GIF87a'或者b'GIF89a'
tiff TIFF(Tag Image File Format)的兩種字節(jié)順序 前兩個字節(jié)為b'MM'或者b'II'
rgb SGI ImgLib 以字節(jié)串b'\x01\xda'開頭
pbm Portable Bitmap 第1個字節(jié)為b'P',第2個字節(jié)為b'1'或b'4',第3個字節(jié)為b'\t'或b'\n'或b'\r'
pgm Portable Graymap Files 第1個字節(jié)為b'P',第2個字節(jié)為b'2'或b'5',第3個字節(jié)為b'\t'或b'\n'或b'\r'
ppm Portable Pixmap Files 第1個字節(jié)為b'P',第2個字節(jié)為b'3'或b'6',第3個字節(jié)為b'\t'或b'\n'或b'\r'
rast Sun Raster 以字節(jié)串b'\x59\xA6\x6A\x95'開頭
xbm X Bitmap Files 以字節(jié)串b'#define ‘開頭
bmp Bitmap,Windows標(biāo)準(zhǔn)圖像文件格式 以字節(jié)串b'BM'開頭
webp 谷歌的WebP格式,Python3.5加入 以字節(jié)串b'RIFF'開頭并且第9到第12個字節(jié)為b'WEBP'
exr OpenEXR,Python3.5加入 以字節(jié)串b'\x76\x2f\x31\x01'開頭

模塊內(nèi)部缺陷

當(dāng)h參數(shù)不為空時,模塊會忽略掉file參數(shù),直接檢測h參數(shù),但此時file參數(shù)又是必須提供的,算是一個設(shè)計缺陷吧。博主個人感覺這個h參數(shù)根本沒有存在的意義,沒必要放在參數(shù)列表里面。

>>> import imghdr
>>> imghdr.what('test.jpg', b'\x89PNG\r\n\x1a\n')
'png'
>>>

自定義檢測流程

imghdr內(nèi)部使用了test_jpeg、test_png、test_gif等函數(shù)檢測文件的格式。模塊內(nèi)部維護(hù)了一個函數(shù)列表imghdr.tests,每次調(diào)用what函數(shù)的時候,會按列表里的順序調(diào)用檢測函數(shù),當(dāng)檢測函數(shù)返回結(jié)果時退出循環(huán)。用戶可以通過修改這個列表達(dá)到修改檢測流程的目的。同時,也可以自行添加檢測函數(shù)到列表里面。

下面這個例子,博主添加了一個函數(shù)放在檢測流程的最后提示文件不是圖片:

>>> import imghdr
>>> def final(h, f):
... print("This file isn\'t a image!")
...
>>> imghdr.tests.append(final)
>>> imghdr.what("imghdr.md")
This file isn't a image!

自行添加檢測函數(shù)需要接收兩個參數(shù)h和f,h是用來檢測的字節(jié)串,f是file對象。但是在模塊內(nèi)部自帶的檢測函數(shù)都是沒用到這個f參數(shù)的…

命令行啟動imghdr模塊

博主讀源碼的時候發(fā)現(xiàn)了官方文檔里面沒提到的兩個函數(shù),提供了直接用命令行啟動imghdr模塊的方法。

只需要調(diào)用python -m imghdr [-r] file1 file2...就可以直接檢測文件的類型。file可以是文件也可以是文件夾。該命令默認(rèn)只檢測文件夾下一層的文件類型,如果需要遞歸檢測,則加上-r參數(shù)。

每個文件以”文件名: 文件類型/None”的形式打印一行輸出結(jié)果。

總結(jié):可能是因為使用的人少的原因,imghdr這個模塊內(nèi)部有挺多小問題,不過只要老老實實按照官方提供的文檔使用是不會出事的。博主后面試著改一下這個模塊然后pr上去。

以上就是本文關(guān)于Python用imghdr模塊識別圖片格式實例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • python實現(xiàn)在windows下操作word的方法

    python實現(xiàn)在windows下操作word的方法

    這篇文章主要介紹了python實現(xiàn)在windows下操作word的方法,涉及Python操作word實現(xiàn)打開、插入、轉(zhuǎn)換、打印等操作的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • python 獲取list特定元素下標(biāo)的實例講解

    python 獲取list特定元素下標(biāo)的實例講解

    下面小編就為大家分享一篇python 獲取list特定元素下標(biāo)的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 解決python爬蟲中有中文的url問題

    解決python爬蟲中有中文的url問題

    今天小編就為大家分享一篇解決python爬蟲中有中文的url問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python django事務(wù)transaction源碼分析詳解

    python django事務(wù)transaction源碼分析詳解

    這篇文章主要介紹了python django事務(wù)transaction源碼分析詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 基于PyQT5制作一個二維碼生成器

    基于PyQT5制作一個二維碼生成器

    這篇文章主要介紹了利用PyQT5制作一個簡單的二維碼生成器,并打包成exe可執(zhí)行程序。文中的示例代碼講解詳細(xì),感興趣的同學(xué)可以了解一下
    2021-12-12
  • NumPy內(nèi)存布局的實現(xiàn)

    NumPy內(nèi)存布局的實現(xiàn)

    本文主要介紹了NumPy內(nèi)存布局的實現(xiàn),括連續(xù)內(nèi)存布局(C順序)和分散內(nèi)存布局(Fortran順序),并通過實例演示如何操作數(shù)組的內(nèi)存布局,感興趣的可以了解一下
    2024-01-01
  • python 將字符串轉(zhuǎn)換成字典dict

    python 將字符串轉(zhuǎn)換成字典dict

    將字符串轉(zhuǎn)化成字典dict類型?這個可以用python的標(biāo)準(zhǔn)庫simplejson 轉(zhuǎn)換為JSON格式。
    2013-03-03
  • Python3搜索及替換文件中文本的方法

    Python3搜索及替換文件中文本的方法

    這篇文章主要介紹了Python3搜索及替換文件中文本的方法,涉及Python操作文件及字符串的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python給圖像添加噪聲具體操作

    Python給圖像添加噪聲具體操作

    在本文里我們給大家整理了關(guān)于Python如何給圖像添加噪聲的相關(guān)知識點(diǎn)以及操作步驟,需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • Python3 正在毀滅 Python的原因分析

    Python3 正在毀滅 Python的原因分析

    Python 2強(qiáng)大的一個地方是它身后巨大的第三方庫,恩,可以做任何事。Python 3沒有這個。是的,很多庫已經(jīng)移植了,但是仍然有數(shù)以十倍的庫沒有移植過去,而且也不太容易
    2014-11-11

最新評論