Я использую Curl via Proxies для загрузки изображений со скребком, который я разработал.PHP: определение визуально искаженных изображений (правда, действительно), загруженных через Curl с помощью GD/Imagemagick
К сожалению, он получает странное изображение, которое выглядит как это и последний полностью пустым:/
- Когда я проверяю изображения с помощью 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";
}
?>
Кто-нибудь видит какие-то потенциальные подводные камни с этим? Я подумал о том, чтобы получить последние несколько строк изображения, а затем сравнить общее количество 127,128,129 (серые) от общего количества других цветов. Если серый цвет больше, чем другие цвета, то изображение, безусловно, повреждено.
Мнения приветствуются! :)
Хм. Если все эти функции говорят, что это действительный образ, они, вероятно, просто проверяют байты заголовка, но не смотрят, действительно ли весь файл * там *. Я бы ожидал, что там будет байт заголовка, который определяет ожидаемый, но я точно не знаю, существует ли такая вещь. –