【发布时间】:2012-02-18 04:29:57
【问题描述】:
我正在使用 Curl via Proxies 通过我开发的刮刀下载图像。
不幸的是,它得到了看起来像这样的奇怪图像,最后一个完全空白:/
- 当我通过 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(灰色)的总数与其他颜色的总数进行比较。如果灰色大于其他颜色,则图像肯定已损坏。
欢迎发表意见! :)
【问题讨论】:
-
嗯。如果所有这些函数都说它是一个有效的图像,它们可能只是检查头字节,而不是查看整个文件是否真的在那里。我希望有一个标头字节指定预期的,但我不确定是否存在这样的事情
标签: php imagemagick php-gd