Verimli bozuk jpeg dosya algılar?

6 Cevap php

Bir jpeg dosyası bozuksa tespit etkili bir yolu var mı?

Background info:
  solutions needs to work from within a php script
  the jpeg files are on disk
  manual checking is no option (user uploaded data)

I imagecreatefromjpeg(string $filename); bunu biliyorum. Ama bunu yaparken de oldukça yavaştır.

Herkes daha hızlı / daha verimli çözümler biliyor mu?

6 Cevap

Komut satırından bir jpeg dosyası tamam olup olmadığını öğrenmek için JPEGInfo kullanabilirsiniz.

$ JPEGInfo-c test.jpeg

test.jpeg 260 x 264 24bit JFıF N 15332 [OK]

Bu php den JPEGInfo aramak için önemsiz olmalıdır.

Benim basit (ve hızlı) çözüm:


function jpeg_file_is_complete($path) {
    if (!is_resource($file = fopen($path, 'rb'))) {
        return FALSE;
    }
    // check for the existence of the EOI segment header at the end of the file
    if (0 !== fseek($file, -2, SEEK_END) || "\xFF\xD9" !== fread($file, 2)) {
        fclose($file);
        return FALSE;
    }
    fclose($file);
    return TRUE;
}

function jpeg_file_is_corrupted($path) {
    return !jpeg_file_is_complete($path);
}

Not: Bu yalnızca bozuk bir dosya yapısını algılar, ancak bozuk görüntü verilerini tespit DEĞİLDİR.

Ben basit bir getimagesize ile başka bir çözüm var ()

if(!getimagesize($image_url)) echo 'Image is corrupt or not readable';

Ayrıca MD5 tabanlı dosya karmasını oluşturmak için denemek ve çeşitli adımlar JPEG verileri doğrulamak için sağlama olarak kullanabilirsiniz. Örneğin, sonra, sonra transferinden sonra, vb dosyadan okumak

Çözüm:

Ben ne gerekli için mükemmel bir araç bulundu:

http://www.thomasbarker.co.uk/2011/05/29/corrupt-jpeg-checkertool-for-finding-corrupt-jpeg-image-files/

Bir dizinin özyinelemeli arar ve herhangi bir bozuk JPEG'leri bulur. Ayrıca bunu yapmak için istediğiniz kadar çok sayıda CPU kullanabilirsiniz benziyor.

Benim için çalıştı.