如何使用Python查找损坏的图像?我个人经常处理动画渲染(注意最好的渲染方式是按顺序渲染图像文章,而不是一次处理所有视频文件),所以这种问题真的很困扰我。此外,摄影师甚至普通用户在处理计算机图像时经常会遇到由色调映射和文件传输过程引起的图像损坏。事实上,修复或替换损坏的图像本身并不困难,通常只需要您重新渲染图像或重新尝试传输即可。核心问题是如何尽早发现那些损坏的图像。这类问题发现的越晚,给你带来的麻烦就越多。那我们怎么解决呢?最直观的方式无疑是一直打开文件。如果损坏,相关图像编辑器或查看器将报错。但是,当图片数量非常多时,光是浏览图片就可能需要数小时甚至数天的时间。尽管动画渲染处理的文件通常很小,但数量却相当可观。我个人经常需要渲染超过44000帧的图片,审核工作量可想而知。那么如何解决呢?答案很简单——写一个脚本。首先,列出要检查的文件。假设所有要检查的图像文件都在硬盘驱动器上的一个目录中,并假设您将从该目录运行脚本,您可以使用以下Python代码获取相应的文件列表:importosforfilenameinos.listdir('./'):print(filename)如果需要,您可以通过添加进一步缩小图像列表(或使其更明确,例如不使用脚本本身作为文件之一)PNG扩展名:importosforfilenameinos.listdir('./'):iffilename.endswith('.png'):print(filename)现在您在当前工作目录中有了每个PNG图像文件的列表。接下来找出哪些图像已损坏。遗憾的是,目前不借助图像处理功能很难直接判断其是否损坏,也就是说需要先获取图像处理模块才能查看这些文件。但好消息是Python开发社区提供了现成的解决方案。事实上,您可以直接安装完整的包存储库。这里我推荐pip(Python包的推荐安装工具)。在大多数平台上,它会在您安装Python时默认安装。注:我个人使用的是Python3,但是如果你使用的是Python2,那么本文的内容会因为版本差异需要做相应的调整。此外,许多Linux发行版会建议您安装自己的包管理系统。之所以在这里推荐pip,是因为它可以在所有支持Python的平台上提供相同的好处。这里我也推荐大家安装Pillow包。它是PIL(Python图像库)的友好分支,适用于现有的Python3和Python2。要安装Pillow,您需要做的就是在终端窗口中键入pipinstallPillow。这套Python包工具将自行处理其余部分。安装完成后,下一步就是将其实现到脚本中。它的使用方式与Python中的其他模块一样,可以使用import来实现——本例中可以使用importPIL。但是,要查找损坏的图像,您不需要将整个Pillow库导入到您的脚本中。在Python中,您只能导入模块的子组件。这种做法可以有效减少内存占用,更重要的是,从一开始就清楚你的脚本需要哪些功能。此外,您的脚本在导入子组件时需要更少的输入,从而简化了整个使用过程。要在模块中导入子组件,您可以将import与from指令结合使用。在Pillow中,你的脚本只需要使用Image类,所以你可以使用像fromPILimportImage这样的表达式。事实上,您可以使用os模块来实现相同的效果。这意味着我们可以将importos调整为fromosimportlistdir,也就是说运行这个脚本时,我们将不再需要输入os.listdir。相反,您只需输入listdir即可完成所有必要的导入。总而言之,我们的脚本现在应该是这样的:已加载完成,但脚本未对其执行任何操作。现在进入脚本的功能部分。显然,我们需要打开每个图像文件并检查它是否可读。如果有错误,则表示发现了损坏的文件。要实现此功能,您可以使用try/except代码块。简而言之,您的脚本会尝试运行一个函数来打开文件。如果函数返回一个错误,这是一个异常,这意味着图像有问题。具体来说,如果异常是IOError或SyntaxError类型,则表示图片损坏。实现try/except的语法非常简单,如下所示:try:#这些下一个函数可能会产生异常#
