Эффективно обнаружьте поврежденный jpeg файл?

Вы пытаетесь присвоить String (s) a Charset, но вам действительно нужно извлечь bytes с определенным Charset

[ 110]

И, кстати, вам не нужно все это

final byte[] bytes = "Анна Меркулова".getBytes("windows-1251");
final String result = new String(bytes);
15
задан Jacco 14 October 2008 в 09:06
поделиться

4 ответа

Из командной строки можно использовать jpeginfo, чтобы узнать, ли jpeg файл в порядке или нет.

JFIF N 15332$ jpeginfo-c test.jpeg

test.jpeg 260 x 264 24 битов [хорошо]

Это должно быть тривиально для вызова jpeginfo от php.

17
ответ дан 1 December 2019 в 02:47
поделиться

Мое самое простое (и самое быстрое) решение:


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);
}

Примечание: это обнаруживает только поврежденную файловую структуру, но НЕ обнаруживает поврежденные данные изображения.

8
ответ дан 1 December 2019 в 02:47
поделиться

Вы также можете попробовать генерировать файловый хеш на основе MD5 и использовать его в качестве контрольной суммы для проверки данных JPEG на различных шагах. Например, после чтения из файла, затем после передачи и т. Д.

-1
ответ дан 1 December 2019 в 02:47
поделиться

К вашему сведению - я использовал метод выше ( jpeg_file_is_complete ) , чтобы проверить файлы JPEG, которые, как я знаю, повреждены (например, когда я загружаю их в браузере, нижняя часть становится серой, т. е. изображение «обрезано»). Во всяком случае, когда я запустил вышеуказанный тест на этом изображении, он НЕ обнаружил его как поврежденный.

Пока что использование imagecreatefromjpeg () работает, но не очень быстро. Я обнаружил, что использование jpeginfo также работает для обнаружения этих типов поврежденных изображений и БЫСТРЕЕ, чем imagecreatefromjpeg (я провел тест на моем PHP, используя microtime () ]).

6
ответ дан 1 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: