检测损坏的png文件的有效方法?

Posted

技术标签:

【中文标题】检测损坏的png文件的有效方法?【英文标题】:An efficient way to detect corrupted png files? 【发布时间】:2011-01-23 22:44:30 【问题描述】:

我编写了一个程序来处理由单独进程生成的一堆 png 文件。捕获主要是有效的,但是有时进程会终止并重新启动,这会留下损坏的图像。我无法检测进程何时终止或哪个文件终止(大约有 3000 个 png 文件)。

有没有检查损坏的 png 文件的好方法?

【问题讨论】:

"我无法检测到进程何时终止或它在哪个文件上终止" - 为什么? 【参考方案1】:

我知道这是 2010 年的一个问题,但我认为这是一个更好的解决方案:pngcheck。

【讨论】:

【参考方案2】:

由于您使用的是 Linux 系统,因此您可能已经安装了 Python。

一种简单的方法是尝试使用 PIL(Python 图像库)加载和验证文件(您需要先安装它)。

from PIL import Image

v_image = Image.open(file)
v_image.verify()

(逐字取自my own answer in this thread)

【讨论】:

【参考方案3】:

另一种可能的解决方案是稍微改变处理器处理文件的方式:让它始终创建一个名为 temp.png 的文件(例如),然后在完成后将其重命名为“正确”的名称。这样,你就知道周围是否有一个名为 temp.png 的文件,那么进程就会被中断,而如果没有这个文件,那么一切都很好。

(一种变体命名方案将执行 Firefox 的下载器所做的事情——将 .partial 附加到真实文件名以获取临时名称。)

【讨论】:

【参考方案4】:

有点像黑客,但有效 如果你在 linux 或类似的东西上运行,你可能有“转换”命令

$ convert --help
Version: ImageMagick 5.5.6 04/01/03 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 2003 ImageMagick Studio LLC

Usage: convert [options ...] file [ [options ...] file ...] [options ...] file

如果你做了一个无效的png,然后尝试转换,你会得到一个错误:

$ date> foo.png
$ convert foo.png foo.gif
convert: NotAPNGImageFile (foo.png).

【讨论】:

是的,看起来你可以在某些方面破坏 png 导致转换不抱怨。 (比如做一个“echo corrupt >> valid.png”并做一个转换)。

以上是关于检测损坏的png文件的有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以让 PHP 检测到损坏的图像?

如何检测PDF文档是不是损坏了?

怎么检测PDF文件是不是损坏

TCP 校验和能否检测到错误?如果是,如何处理?

如何检测pdf文档是不是有损坏

使用批处理脚本检测文件损坏