Tôi đang sử dụng Curl qua Proxy để tải xuống hình ảnh bằng một scraper mà tôi đã phát triển.PHP: Xác định hình ảnh bị hỏng hình ảnh (chưa hợp lệ) được tải xuống qua Curl với GD/Imagemagick
Thật không may, nó được hình ảnh kỳ lạ trông giống như những điều này và người cuối cùng là hoàn toàn trống:/
- Khi tôi thử nghiệm những hình ảnh qua ImageMagick (sử dụng xác định) nó cho tôi biết chúng là những hình ảnh hợp lệ.
- Khi tôi kiểm tra lại hình ảnh qua exif_imagetype() và imagecreatefromjpeg(), cả hai chức năng này đều cho tôi biết hình ảnh hợp lệ.
Có ai có cách xác định xem hình ảnh có phần lớn màu xám hoặc hoàn toàn trống/trắng và đây thực sự là hình ảnh bị hỏng không?
Tôi đã thực hiện rất nhiều kiểm tra với các câu hỏi khác ở đây, nhưng tôi đã không có nhiều may mắn với các giải pháp khác. Vì vậy, hãy cẩn thận khi đề xuất đây là bản sao.
Cảm ơn
Sau khi biết về imgcolorat, tôi đã tìm kiếm và vấp vào một số mã. Tôi đã đưa ra điều này:
<?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";
}
?>
Bất cứ ai cũng thấy một số cạm bẫy tiềm năng với điều này? Tôi nghĩ về việc nhận được một vài hàng cuối cùng của hình ảnh và sau đó so sánh tổng số 127,128,129 r (màu xám) so với tổng số các màu khác. Nếu màu xám lớn hơn các màu khác thì hình ảnh chắc chắn bị hỏng.
Ý kiến được chào đón! :)
Hmm. Nếu tất cả các hàm đó nói đó là một hình ảnh hợp lệ, chúng có thể chỉ kiểm tra các byte tiêu đề nhưng không nhìn xem toàn bộ tệp có thực sự là * có * hay không. Tôi mong đợi có một byte tiêu đề xác định dự kiến với, nhưng tôi không biết chắc chắn liệu một điều như vậy có tồn tại không? –