首页 > 解决方案 > 为什么我对 jpg 文件使用打印功能,它不是以 '\xff\xd8' 开头

问题描述

最近我读了一本书,有一些代码片段是这样的:

import io

with open('photo.jpg', 'rb') as inf:
    jpgdata = inf.read()

if jpgdata.startswith(b'\xff\xd8'):
    text = u'This is a JPEG file (%d bytes long)\n'
else:
    text = u'This is a random file (%d bytes long)\n'

我像这样更改代码:

import io  
with open('photo.jpg', 'rb') as inf:
    jpgdata = inf.read()

if jpgdata.startswith(b'\xff\xd8'):
    print("This is a JPEG file")       #change this line
else:
    print("This is not  a JPEG file") #change this line

输出是:

在此处输入图像描述

我在哪里打印jpgdata

 import io  
with open('photo.jpg', 'rb') as inf:
    jpgdata = inf.read()
    print(jpgdata) #add this line 

if jpgdata.startswith(b'\xff\xd8'):
    print("This is a JPEG file")
else:
    print("This is not  a JPEG file")

我发现输出是这样的: 在此处输入图像描述

所以,我的问题是为什么打印功能不以字节 FF D8 开头?

标签: pythonpython-3.x

解决方案


大多数文件带有一个 2 字节的标题,称为“幻数”,它基本上指定了文件类型。

JPEG 的幻数是“FFD8”,因此您可以通过检查文件是否以"\xFF\xD8".

如果它不是以该数字开头,您可能应该将其作为调试打印出来,以检查标题的其余部分是否与 JPEG 相关。您还可以进行一些进一步的启发式检查,看看它是否贴错标签。


推荐阅读