有效检测损坏的jpeg文件?

2022-08-31 00:50:15

有没有一种有效的方法来检测jpeg文件是否损坏?

背景信息:
解决方案需要从php脚本
中工作jpeg文件在磁盘
上手动检查是否没有选项(用户上传的数据)

我知道这是可以做到的。但这样做的速度相当慢。imagecreatefromjpeg(string $filename);

有谁知道更快/更有效的解决方案吗?


答案 1

从命令行中,您可以使用jpeginfo来找出jpeg文件是否正常。

$ jpeginfo -c test.jpeg

测试.jpeg 260 x 264 24位 JFIF N 15332 [确定]

从php调用jpeginfo应该是微不足道的。


答案 2

我最简单(也是最快)的解决方案:


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

注意:这仅检测损坏的文件结构,但不检测损坏的图像数据。


推荐