当前位置:  开发笔记 > 编程语言 > 正文

有效地检测损坏的jpeg文件?

如何解决《有效地检测损坏的jpeg文件?》经验,为你挑选了3个好方法。

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

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

我知道imagecreatefromjpeg(string $filename);可以做到.但这样做很慢.

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



1> Pat..:

从命令行,您可以使用jpeginfo来查明jpeg文件是否正常.

$ jpeginfo -c test.jpeg

test.jpeg 260 x 264 24bit JFIF N 15332 [确定]

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


注意来自OP的关于慢的说法:分支外部进程并处理返回可能比imagecreatefromjpeg()更慢!

2> fireweasel..:

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

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

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



3> Travis..:

仅供参考 - 我使用上面的方法(jpeg_file_is_complete)来测试我知道已损坏的JPEG(当我在浏览器中加载它们时,例如,底部是灰色的 - 即图像被"切断").无论如何,当我在该图像上运行上述测试时,它不会将其检测为损坏.

到目前为止,使用imagecreatefromjpeg()作品,但不是很快.我发现使用jpeginfo也可以检测这些类型的损坏图像,并且比imagecreatefromjpeg我在PHP中运行基准测试更快microtime().


快速跟进.我已成功使用"jpeginfo"来测试JPG,它运行良好.它速度快,不会产生误报.
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有