我编写了一个程序来处理由单独进程生成的一堆png文件。捕获主要起作用,但有时候进程死亡并重新启动会留下损坏的图像。我无法检测进程何时死亡或哪个文件死亡(有~3000个png文件)。
有没有一种好方法可以检查损坏的png文件?
答案 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。