別のプロセスで生成された一連のpngファイルを処理するプログラムを作成しました。キャプチャはほとんど機能しますが、プロセスが停止して再起動し、破損したイメージが残る場合があります。プロセスがいつ終了したか、またはどのファイルが終了したかを検出する方法がありません (約 3000 個の png ファイルがあります)。
破損したpngファイルをチェックする良い方法はありますか?
Linux システムを使用しているため、おそらく既に Python がインストールされています。
簡単な方法は、PIL (Python Imaging Library) を使用してファイルを読み込んで検証することです (最初にインストールする必要があります)。
from PIL import Image
v_image = Image.open(file)
v_image.verify()
(このスレッドでの私自身の回答からそのまま引用)
別の可能な解決策は、プロセッサがファイルを処理する方法をわずかに変更することです。たとえば、常にtemp.pngという名前のファイルを作成し、完了したら「正しい」名前に名前を変更します。そうすれば、temp.pngという名前のファイルが周りにあるかどうかがわかり、プロセスが中断されますが、そのようなファイルがない場合は、すべてが正常です。
(別の命名スキームは、Firefoxのダウンローダーが行うことを実行することです-一時的な名前を取得するには、実際のファイル名に.partialを追加します。)
一種のハックですが、動作します 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).