Uso Curl tramite Proxy per scaricare immagini con un raschietto che ho sviluppato.PHP: Determina immagini visivamente corrotte (ancora valide) scaricate tramite Curl con GD/Imagemagick
Purtroppo, si ottiene l'immagine strana che sembra come questi e l'ultimo è completamente vuoto:/
- quando prova le immagini via ImageMagick (usando identifica) mi dice che sono immagini valide.
- Quando eseguo di nuovo il test delle immagini tramite exif_imagetype() e imagecreatefromjpeg(), entrambe le funzioni indicano che le immagini sono valide.
Qualcuno ha un modo per determinare se l'immagine ha la maggior parte del grigiore o è completamente bianca/bianca e queste sono effettivamente immagini danneggiate?
Ho fatto un sacco di controllo con altre domande qui, ma non ho avuto molta fortuna con altre soluzioni. Quindi, si prega di fare attenzione nel suggerire che questo è un duplicato.
Grazie
Dopo conoscere imgcolorat, ho fatto una ricerca e sono imbattuto in un codice. Mi è venuto in mente questo:
<?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";
}
?>
Qualcuno vede qualche potenziale insidia con questo? Ho pensato di ottenere le ultime poche righe dell'immagine e quindi di confrontare il totale di r 127,128,129 (che sono grigie) rispetto al totale di altri colori. Se il grigio è maggiore degli altri colori, l'immagine è sicuramente danneggiata.
Opinioni ben accette! :)
Hmm. Se tutte queste funzioni dicono che è un'immagine valida, probabilmente controllano i byte dell'intestazione ma non guardano se l'intero file è effettivamente * lì *. Mi aspetto che ci sia un byte di intestazione che specifica l'atteso con, ma non so con certezza se esista una cosa del genere –