プロキシ経由でカールを使用して、開発したスクレーパーで画像をダウンロードしています。
残念ながら、これらのような奇妙な画像が得られ、最後の画像は完全に空白です:/
- imagemagick (identify を使用) で画像をテストすると、それらが有効な画像であることがわかります。
- exif_imagetype() と imagecreatefromjpeg() を介して画像を再度テストすると、これらの関数は両方とも画像が有効であることを教えてくれます。
画像の大部分が灰色であるか、完全に空白/白であり、これらが実際に破損した画像であるかを判断する方法はありますか?
ここで他の質問で多くのチェックを行いましたが、他の解決策についてはあまりうまくいきませんでした. したがって、これが重複していることを示唆することに注意してください。
ありがとう
imgcolorat について知った後、検索を行ったところ、いくつかのコードに出くわしました。私はこれを思いついた:
<?php
$file = dirname(__FILE__) . "/images/1.jpg";
$img = imagecreatefromjpeg($file);
$imagew = imagesx($img);
$imageh = imagesy($img);
$xy = array();
$last_height = $imageh - 5;
$foo = array();
$x = 0;
$y = 0;
for ($x = 0; $x <= $imagew; $x++)
{
for ($y = $last_height;$y <= $imageh; $y++ )
{
$rgb = @imagecolorat($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if ($r != 0)
{
$foo[] = $r;
}
}
}
$bar = array_count_values($foo);
$gray = (isset($bar['127']) ? $bar['127'] : 0) + (isset($bar['128']) ? $bar['128'] : 0) + (isset($bar['129']) ? $bar['129'] : 0);
$total = count($foo);
$other = $total - $gray;
if ($gray > $other)
{
echo "image corrupted \n";
}
else
{
echo "image not corrupted \n";
}
?>
これで潜在的な落とし穴が見られる人はいますか? 画像の最後の数行を取得し、r 127,128,129 (灰色) の合計を他の色の合計と比較することを考えました。灰色が他の色よりも大きい場合、画像は確実に破損しています。
意見歓迎!:)