PHP: Определить визуально поврежденные изображения (но все еще действительные), загруженные через Curl с помощью GD/Imagemagick

Я использую Curl через прокси для загрузки изображений с помощью разработанного мной скрепера.

К сожалению, он получает странные изображения, которые выглядят как эти и последнее совершенно пустое :/

3/4 corrupted dog corrupted room corrupted completely white

  • Когда я проверяю изображения с помощью imagemagick (используя идентификацию), он говорит мне, что это действительные изображения.
  • Когда я проверяю изображения через 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 (которые являются серыми) с общим количеством других цветов. Если серого больше, чем других цветов, то изображение наверняка испорчено.

Мнения приветствуются! :)

6
задан PaulM 25 January 2012 в 00:52
поделиться