2010-03-05 39 views
1

我已經編寫了一個程序來處理由一個單獨的進程生成的一堆png文件。捕獲通常是有效的,但是有些時候該進程死亡並且正在重新啓動,從而導致圖像損壞。我無法檢測到進程何時死亡或哪個文件死亡(有〜3000個png文件)。檢測損壞的png文件的有效方法?

有沒有好的方法來檢查損壞的PNG文件?

+2

「我無法檢測到進程何時死亡或死於哪個文件」 - 爲什麼? – 2010-03-05 01:34:16

回答

3

一個不同的可能的解決辦法是稍微改變你的處理器如何處理這些文件:有它總是創建一個名爲temp.png文件(例如),然後將其重命名爲「正確」的名字一旦完成。這樣,你知道是否有一個名爲temp.png的文件,然後過程被打斷,而如果沒有這樣的文件,那麼一切都很好。

(A變種的命名方案是做什麼Firefox的下載並 - 追加.partial到真正的文件名,以獲得臨時名稱)

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). 
+0

如果png的頭文件有效,imagemagick仍會失敗嗎? – rook 2010-03-05 01:53:48

+0

是的,看起來像你可以在某些方面損壞一個PNG導致轉換不抱怨。 (比如做一個「echo corrupt >> valid.png」並進行轉換)。 – mlathe 2010-03-05 17:57:48

3

因爲你是一個Linux系統上,你可能已經擁有的Python安裝。

一個簡單的方法是嘗試使用PIL(Python Imaging Library)加載和驗證文件(您需要先安裝它)。

from PIL import Image 

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

(從my own answer in this thread逐字)

2

我知道這是從2010年的一個問題,但我認爲這是一個更好的解決方案:pngcheck