最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

檢查圖片是否損壞

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

測(cè)試圖片,0.jpg是正常的,broke.jpg是手動(dòng)刪掉一點(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 ''

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

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

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

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

校驗(yàn)log:

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

代碼如下:

  def is_type_wrong(path):
    '''
    檢查文件后綴是否與實(shí)際對(duì)應(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)

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

小結(jié)

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

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

相關(guān)文章

  • Python調(diào)用C++,通過Pybind11制作Python接口

    Python調(diào)用C++,通過Pybind11制作Python接口

    今天小編就為大家分享一篇關(guān)于Python調(diào)用C++,通過Pybind11制作Python接口,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • ubuntu17.4下為python和python3裝上pip的方法

    ubuntu17.4下為python和python3裝上pip的方法

    今天小編就為大家分享一篇ubuntu17.4下為python和python3裝上pip的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • pycharm: 恢復(fù)(reset) 誤刪文件的方法

    pycharm: 恢復(fù)(reset) 誤刪文件的方法

    今天小編就為大家分享一篇pycharm: 恢復(fù)(reset) 誤刪文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 一文詳解NumPy簡(jiǎn)單算術(shù)及其他運(yùn)算的實(shí)現(xiàn)

    一文詳解NumPy簡(jiǎn)單算術(shù)及其他運(yùn)算的實(shí)現(xiàn)

    你可以直接在 NumPy 數(shù)組之間使用算術(shù)運(yùn)算符 + - * /,但本節(jié)討論了一個(gè)擴(kuò)展,其中我們有函數(shù)可以接受任何類似數(shù)組的對(duì)象,如列表、元組等,并根據(jù)條件執(zhí)行算術(shù)運(yùn)算,文中通過代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 深度學(xué)習(xí)環(huán)境搭建anaconda+pycharm+pytorch的方法步驟

    深度學(xué)習(xí)環(huán)境搭建anaconda+pycharm+pytorch的方法步驟

    本文主要介紹了深度學(xué)習(xí)環(huán)境搭建anaconda+pycharm+pytorch的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • pygame實(shí)現(xiàn)俄羅斯方塊游戲(基礎(chǔ)篇2)

    pygame實(shí)現(xiàn)俄羅斯方塊游戲(基礎(chǔ)篇2)

    這篇文章主要為大家介紹了pygame實(shí)現(xiàn)俄羅斯方塊游戲基礎(chǔ)的第2篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python可視化mhd格式和raw格式的醫(yī)學(xué)圖像并保存的方法

    Python可視化mhd格式和raw格式的醫(yī)學(xué)圖像并保存的方法

    今天小編就為大家分享一篇Python可視化mhd格式和raw格式的醫(yī)學(xué)圖像并保存的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python 連連看連接算法

    Python 連連看連接算法

    這段時(shí)間老是“不務(wù)正業(yè)”的搞一些東西玩。之前的貪吃蛇,俄羅斯方塊激發(fā)了我研究游戲算法的興趣。經(jīng)過1個(gè)星期的構(gòu)思,連連看的連接算法終于出爐了。再過一段時(shí)間就基于這個(gè)算法使用JavaScript推出網(wǎng)頁(yè)版的連連看。下面是說明及代碼。
    2008-11-11
  • django+xadmin+djcelery實(shí)現(xiàn)后臺(tái)管理定時(shí)任務(wù)

    django+xadmin+djcelery實(shí)現(xiàn)后臺(tái)管理定時(shí)任務(wù)

    這篇文章主要介紹了django+xadmin+djcelery實(shí)現(xiàn)后臺(tái)管理定時(shí)任務(wù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Python使用scipy進(jìn)行曲線擬合的方法實(shí)例

    Python使用scipy進(jìn)行曲線擬合的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python使用scipy進(jìn)行曲線擬合的相關(guān)資料,Scipy優(yōu)化和擬合采用的是optimize模塊,該模塊提供了函數(shù)最小值(標(biāo)量或多維)、曲線擬合和尋找等式的根的有用算法,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

昌乐县| 布拖县| 平山县| 昌吉市| 渭南市| 孟津县| 怀柔区| 鱼台县| 永登县| 会昌县| 海丰县| 理塘县| 临潭县| 丽水市| 长垣县| 上思县| 慈利县| 曲麻莱县| 永平县| 宁城县| 文登市| 江口县| 瓮安县| 百色市| 沧源| 丹东市| 石河子市| 宜君县| 湛江市| 五台县| 辉县市| 和平区| 百色市| 合水县| 沭阳县| 灌阳县| 河津市| 永宁县| 滦南县| 浠水县| 磐石市|