Python如何檢查圖片是否損壞-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“Python如何檢查圖片是否損壞”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“Python如何檢查圖片是否損壞”這篇文章吧。

“專業(yè)、務(wù)實、高效、創(chuàng)新、把客戶的事當成自己的事”是我們每一個人一直以來堅持追求的企業(yè)文化。 創(chuàng)新互聯(lián)公司是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于網(wǎng)站制作、做網(wǎng)站、軟件開發(fā)、設(shè)計服務(wù)業(yè)務(wù)。我們始終堅持以客戶需求為導向,結(jié)合用戶體驗與視覺傳達,提供有針對性的項目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場,引領(lǐng)市場!

檢查圖片是否損壞

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

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

Python如何檢查圖片是否損壞

腳本運行結(jié)果:

Python如何檢查圖片是否損壞

代碼如下:

  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結(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 ''

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

圖片后綴與實際類型匹配檢驗

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

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

Python如何檢查圖片是否損壞

校驗log:

Python如何檢查圖片是否損壞

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

Python如何檢查圖片是否損壞

代碼如下:

  def is_type_wrong(path):
    '''
    檢查文件后綴是否與實際對應(yīng),例如實際是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)圖片類型修正的功能,還是挺有用的感覺;

以上是“Python如何檢查圖片是否損壞”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:Python如何檢查圖片是否損壞-創(chuàng)新互聯(lián)
文章起源:http://bm7419.com/article8/ijoop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、網(wǎng)站收錄、網(wǎng)站設(shè)計關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)