Python檢查圖片是否損壞及圖片類型是否正確過程詳解
檢查圖片是否損壞
日常工作中,時常會需要用到圖片,有時候圖片在下載、解壓過程中會損壞,而如果一張一張點擊來檢查就太不Cool了,因此我想大家都需要一個檢查腳本;
測試圖片,0.jpg是正常的,broke.jpg是手動刪掉一點內容后異常的:
腳本運行結果:
代碼如下:
def is_valid_image(path): ''' 檢查文件是否損壞 ''' try: bValid = True fileObj = open(path, 'rb') # 以二進制形式打開 buf = fileObj.read() if not buf.startswith(b'\xff\xd8'): # 是否以\xff\xd8開頭 bValid = False elif buf[6:10] in (b'JFIF', b'Exif'): # “JFIF”的ASCII碼 if not buf.rstrip(b'\0\r\n').endswith(b'\xff\xd9'): # 是否以\xff\xd9結尾 bValid = False else: try: Image.open(fileObj).verify() except Exception as e: bValid = False print(e) except Exception as e: return False return bValid flag1=is_valid_image(r'valid/0.jpg') print(flag1) flag1=is_valid_image(r'valid/broke.jpg') print(flag1) print ''
通過該腳本可以自動的對圖片進行校驗,后續(xù)是直接刪除還是將正常、損壞分開就交給大家發(fā)揮啦;
圖片后綴與實際類型匹配檢驗
我相信很多同學都有和我一樣的習慣,在jpg不滿足要求是,手動改為png,實際上大多數(shù)情況下,這種方式是可行的,但是在類型為gif等時,是無法直接打開的,這個需求的來源是我通過itchat做的自動微信內容備份工具
在下載聊天中的圖片時,經常會下載到gif但是實際為jpg或者png的情況,這就導致這些圖片無法直接展示,且需要手動改回實際類型,因此有了下面這個腳本;
類型校驗轉換前:
校驗log:
校驗及轉換結果:
代碼如下:
def is_type_wrong(path): ''' 檢查文件后綴是否與實際對應,例如實際是jpg,后綴是gif,導致打不開 ''' print path real_type = path[path.rfind('.')+1:] print real_type if path.lower().endswith('.gif') or path.lower().endswith('.jpg') or path.lower().endswith('.png'): header = [] with open(path, 'rb') as f: while(len(header)<5): header.append(f.read(1)) print header tmp = real_type if (header[0] == '\x47' and header[1] and '\x49' and header[2] == '\x46' and header[3] == '\x38'): tmp = 'gif' if (header[0] == '\xff' and header[1] == '\xd8'): tmp = 'jpg' if (header[0] == '\x89' and header[1] == '\x50' and header[2] == '\x4e' and header[3] == '\x47' and header[4] == '\x0D'): tmp = 'png' print tmp if real_type != tmp: return True,tmp return False,real_type if __name__ == '__main__': is_wrong,real_type=is_type_wrong('type/1.gif') if is_wrong: os.system('cp type/1.gif type/1.'+real_type) is_wrong,real_type=is_type_wrong('type/2.gif') if is_wrong: os.system('cp type/2.gif type/2.'+real_type) is_wrong,real_type=is_type_wrong('type/3.gif') if is_wrong: os.system('cp type/3.gif type/3.'+real_type) is_wrong,real_type=is_type_wrong('type/4.gif') if is_wrong: os.system('cp type/4.gif type/4.'+real_type)
通過該腳本,可以自動的對圖片的后綴以及其實際類型進行校驗,配合linux的cp、mv等命令很容易的實現(xiàn)圖片類型修正的功能,還是挺有用的感覺;
小結
實際上這兩個腳本的運行都是依賴于圖片文件自身具備的格式,對其固定格式進行檢查,實現(xiàn)完整性、正確性的檢驗,大家也可以嘗試這進行手動的修改類型,比如jpg改為png,手動損壞一個圖片文件,比如直接txt打開后刪掉一段即可來試試看哈;
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
pandas報錯AttributeError: DataFrame object has&
這篇文章主要介紹了pandas報錯AttributeError: DataFrame object has no attribute ix問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02Python實現(xiàn)自動計算Excel數(shù)據指定范圍內的區(qū)間最大值
這篇文章主要為大家詳細介紹了如何基于Python自動計算Excel數(shù)據指定范圍內的區(qū)間最大值,文中的示例代碼簡潔易懂,感興趣的小伙伴可以了解下2023-07-07Django實現(xiàn)auth模塊下的登錄注冊與注銷功能
這篇文章主要介紹了Django實現(xiàn)auth模塊下的登錄注冊與注銷功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10Python實現(xiàn)繪制雙柱狀圖并顯示數(shù)值功能示例
這篇文章主要介紹了Python實現(xiàn)繪制雙柱狀圖并顯示數(shù)值功能,涉及Python數(shù)值運算及基于matplotlib的圖形繪制相關操作技巧,需要的朋友可以參考下2018-06-06Python中random.shuffle()函數(shù)用法代碼案例
random.shuffle方法,對元素進行重新排序,打亂原有的順序,返回一個隨機序列,該方法的作用類似洗牌,本文重點給大家介紹Python中random.shuffle()函數(shù)用法代碼案例,感興趣的朋友跟隨小編一起看看吧2022-11-11Python實現(xiàn)讀取目錄所有文件的文件名并保存到txt文件代碼
這篇文章主要介紹了Python實現(xiàn)讀取目錄所有文件的文件名并保存到txt文件代碼,本文分別使用os.listdir和os.walk實現(xiàn)給出兩段實現(xiàn)代碼,需要的朋友可以參考下2014-11-11