亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python檢查圖片是否損壞及圖片類型是否正確過程詳解

 更新時間:2019年09月30日 09:54:00   作者:HoLoong  
這篇文章主要介紹了Python檢查圖片是否損壞及圖片類型是否正確過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

檢查圖片是否損壞

日常工作中,時常會需要用到圖片,有時候圖片在下載、解壓過程中會損壞,而如果一張一張點(diǎn)擊來檢查就太不Cool了,因此我想大家都需要一個檢查腳本;

測試圖片,0.jpg是正常的,broke.jpg是手動刪掉一點(diǎn)內(nèi)容后異常的:

腳本運(yùn)行結(jié)果:

代碼如下:

  def is_valid_image(path):
    '''
    檢查文件是否損壞
    '''
    try:
      bValid = True
      fileObj = open(path, 'rb') # 以二進(jìn)制形式打開
      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結(jié)尾
          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 ''

通過該腳本可以自動的對圖片進(jìn)行校驗(yàn),后續(xù)是直接刪除還是將正常、損壞分開就交給大家發(fā)揮啦;

圖片后綴與實(shí)際類型匹配檢驗(yàn)

我相信很多同學(xué)都有和我一樣的習(xí)慣,在jpg不滿足要求是,手動改為png,實(shí)際上大多數(shù)情況下,這種方式是可行的,但是在類型為gif等時,是無法直接打開的,這個需求的來源是我通過itchat做的自動微信內(nèi)容備份工具
在下載聊天中的圖片時,經(jīng)常會下載到gif但是實(shí)際為jpg或者png的情況,這就導(dǎo)致這些圖片無法直接展示,且需要手動改回實(shí)際類型,因此有了下面這個腳本;

類型校驗(yàn)轉(zhuǎn)換前:

校驗(yàn)log:

校驗(yàn)及轉(zhuǎn)換結(jié)果:

代碼如下:

  def is_type_wrong(path):
    '''
    檢查文件后綴是否與實(shí)際對應(yīng),例如實(shí)際是jpg,后綴是gif,導(dǎo)致打不開
    '''
    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)

通過該腳本,可以自動的對圖片的后綴以及其實(shí)際類型進(jìn)行校驗(yàn),配合linux的cp、mv等命令很容易的實(shí)現(xiàn)圖片類型修正的功能,還是挺有用的感覺;

小結(jié)

實(shí)際上這兩個腳本的運(yùn)行都是依賴于圖片文件自身具備的格式,對其固定格式進(jìn)行檢查,實(shí)現(xiàn)完整性、正確性的檢驗(yàn),大家也可以嘗試這進(jìn)行手動的修改類型,比如jpg改為png,手動損壞一個圖片文件,比如直接txt打開后刪掉一段即可來試試看哈;

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • pandas報錯AttributeError: DataFrame object has no attribute ix問題

    pandas報錯AttributeError: DataFrame object has&

    這篇文章主要介紹了pandas報錯AttributeError: DataFrame object has no attribute ix問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python實(shí)現(xiàn)自動計算Excel數(shù)據(jù)指定范圍內(nèi)的區(qū)間最大值

    Python實(shí)現(xiàn)自動計算Excel數(shù)據(jù)指定范圍內(nèi)的區(qū)間最大值

    這篇文章主要為大家詳細(xì)介紹了如何基于Python自動計算Excel數(shù)據(jù)指定范圍內(nèi)的區(qū)間最大值,文中的示例代碼簡潔易懂,感興趣的小伙伴可以了解下
    2023-07-07
  • Django實(shí)現(xiàn)auth模塊下的登錄注冊與注銷功能

    Django實(shí)現(xiàn)auth模塊下的登錄注冊與注銷功能

    這篇文章主要介紹了Django實(shí)現(xiàn)auth模塊下的登錄注冊與注銷功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • Python實(shí)現(xiàn)繪制雙柱狀圖并顯示數(shù)值功能示例

    Python實(shí)現(xiàn)繪制雙柱狀圖并顯示數(shù)值功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)繪制雙柱狀圖并顯示數(shù)值功能,涉及Python數(shù)值運(yùn)算及基于matplotlib的圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • 詳細(xì)講解Python中的文件I/O操作

    詳細(xì)講解Python中的文件I/O操作

    這篇文章主要介紹了Python中的文件I/O操作,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python中random.shuffle()函數(shù)用法代碼案例

    Python中random.shuffle()函數(shù)用法代碼案例

    random.shuffle方法,對元素進(jìn)行重新排序,打亂原有的順序,返回一個隨機(jī)序列,該方法的作用類似洗牌,本文重點(diǎn)給大家介紹Python中random.shuffle()函數(shù)用法代碼案例,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Python實(shí)現(xiàn)讀取目錄所有文件的文件名并保存到txt文件代碼

    Python實(shí)現(xiàn)讀取目錄所有文件的文件名并保存到txt文件代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)讀取目錄所有文件的文件名并保存到txt文件代碼,本文分別使用os.listdir和os.walk實(shí)現(xiàn)給出兩段實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-11-11
  • 深入解析Python中的線程同步方法

    深入解析Python中的線程同步方法

    Python盡管可以創(chuàng)建多條線程,但是由于GIL的存在,Python的多條線程并不能同時運(yùn)行,因而線程間的同步便顯得更為重要,這里我們就來深入解析Python中的線程同步方法,需要的朋友可以參考下
    2016-06-06
  • 基于PyQt5制作數(shù)據(jù)處理小工具

    基于PyQt5制作數(shù)據(jù)處理小工具

    這篇文章主要和大家介紹了如何利用Python中的PyQt5模塊制作一個數(shù)據(jù)處理小工具,可以實(shí)現(xiàn)根據(jù)每個Excel數(shù)據(jù)文件里面的Sheet批量將數(shù)據(jù)文件合并成為一個匯總后的Excel數(shù)據(jù)文件,需要的可以參考一下
    2022-03-03
  • Python實(shí)現(xiàn)二叉搜索樹

    Python實(shí)現(xiàn)二叉搜索樹

    二叉搜索樹(二叉排序樹)它的每個節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)為1個父節(jié)點(diǎn)指針,1個左孩子指針,1個有孩子指針,還有就是自己的數(shù)據(jù)部分了,因?yàn)橹挥凶笥覂珊⒆?所以才叫二叉樹,在此基礎(chǔ)上,該二叉樹還滿足另外一個條件:每個結(jié)點(diǎn)的左孩子都不大于該結(jié)點(diǎn)&&每個結(jié)點(diǎn)的右孩子都大于該結(jié)點(diǎn).
    2016-02-02

最新評論