有没有办法用Python(或其他语言)确定JPG图像是否已损坏?

Ray*_*ond 5 python image file

我想知道是否有办法用Python(或其他语言)确定打开JPEG文件,并确定它是否已损坏(例如,如果我在JPG文件完成之前终止下载,那么我我无法打开文件并查看它)?是否有库可以轻松完成?

Rol*_*ith 6

您可以尝试使用PIL.但只是打开一个截断的JPG文件不会失败,也不会失败verify.但是,尝试加载它会引发异常;

首先,我们修改一个好的jpg文件:

> du mvc-002f.jpg
56  mvc-002f.jpg
> dd if=mvc-002f.jpg of=broken.jpg bs=1k count=20
20+0 records in
20+0 records out
20480 bytes transferred in 0.000133 secs (154217856 bytes/sec)
Run Code Online (Sandbox Code Playgroud)

然后我们尝试Python Imaging Library:

>>> import Image
>>> im = Image.open('broken.jpg')
>>> im.verify()
>>> im = Image.open('broken.jpg')  # im.verify() invalidates the file pointer
>>> im.load()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/PIL/ImageFile.py", line 201, in load
    raise IOError("image file is truncated (%d bytes not processed)" % len(b))
IOError: image file is truncated (16 bytes not processed)
Run Code Online (Sandbox Code Playgroud)

如用户872992所述,甚至截断的图像通常仍然可以被部分解码和显示.


Jan*_*rny 0

您可以使用 PIL 包来做到这一点:

import Image

def is_image_ok(fn):
    try:
        Image.open(fn)
        return True
    except:
        return False
Run Code Online (Sandbox Code Playgroud)

  • 打开文件并不总是足以检测文件损坏。 (5认同)