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

时间:2010-03-05 01:31:23

标签: linux png libpng

我编写了一个程序来处理由单独进程生成的一堆png文件。捕获主要起作用,但有时候进程死亡并重新启动会留下损坏的图像。我无法检测进程何时死亡或哪个文件死亡(有~3000个png文件)。

有没有一种好方法可以检查损坏的png文件?

4 个答案:

答案 0 :(得分:4)

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

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

from PIL import Image

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

(从my own answer in this thread逐字逐句)

答案 1 :(得分:3)

有点黑客,但有效 如果你在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).

答案 2 :(得分:3)

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

(变体命名方案是执行Firefox的下载程序 - 将.partial附加到真实文件名以获取临时名称。)

答案 3 :(得分:3)

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