2

私は Web クローラーを構築していますが、その機能の 1 つは画像をダウンロードすることです。

問題は、何らかの理由でダウンロードされた画像にエラーがある場合があることです。たとえば、ある時点でダウンロードが停止したように、画像の半分が無地の灰色または白で、空白が灰色で埋められます。画像タイプは、getimagesize で取得でき、開いて表示できるため、引き続き有効であると見なされます。しかし、彼らはオリジナルのようではありません。

何か案は?

4

3 に答える 3

1

imagecreatefromstring() を実行するだけで、リソース以外が返されるかどうかを確認できます

于 2011-03-24T16:04:33.293 に答える
1

応答ヘッダーContent-Lengthを、受信した実際のバイト数と比較します。他にも理由があるかもしれませんが、その画像をダウンロードするコードを見ないと何もわかりません。

于 2011-03-24T14:58:53.663 に答える
1

通信障害だと思います。

多くのケースを目にします。接続がリセットされたかのどちらかです。この場合、ソケット信号をテストすることで問題を診断し、ダウンロードを再開できるはずです。

または、送信中に未検出のエラーが発生した場合 (ただし、通常は TCP/IP がこれに対処する必要があります) および/またはダウンロードしたすべてのデータを正しく書き込んでいない場合 (ソケット上のすべてのデータを読み取ったと思いますが、read は最小値を提供し、戻り値をチェックして意図したサイズであることを確認しません)、画像は完全ではありません。

通常、ハーフ グレーの画像 (特に JPEG) はファイルが不完全であることを示しています (ヘッダーは問題ないので、getimagesize で問題はありません) が、JPEG は . で終わっていません0xFF 0xD9。したがって、読み取る必要があるサイズと比較して、すべてのデータを読み取ったことを確認してください。最終的には、たとえば JPEG 内のフラグをチェックすることによって、ファイルの整合性をチェックするイメージ フォーマット依存関数を作成できます。ただし、リソースを消費する可能性があります。

于 2011-03-24T15:02:43.440 に答える