python - 为什么我对 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 开头?
解决方案
大多数文件带有一个 2 字节的标题,称为“幻数”,它基本上指定了文件类型。
JPEG 的幻数是“FFD8”,因此您可以通过检查文件是否以"\xFF\xD8"
.
如果它不是以该数字开头,您可能应该将其作为调试打印出来,以检查标题的其余部分是否与 JPEG 相关。您还可以进行一些进一步的启发式检查,看看它是否贴错标签。
推荐阅读
- python - Python - 在类外定义类方法 - 不能用下划线开始方法名称
- java - java中的x % 2 > 0是什么意思?
- python - 如何制作一个识别 2 个文本文件通用单词的 Python 程序?
- emacs - 如何从 org-calendar 跳转到 org-agenda 显示一整天
- solidity - 交易到 Auction.placeBid 错误:VM 错误:还原。revert 交易已经恢复到初始状态
- python - TypeError:预期的 str、字节或 os.PathLike 对象,而不是 numpy.ndarray
- javascript - 用于替换部分链接的 Tampermonkey 脚本
- javascript - 是否可以从 docChanges 反转对象?
- javascript - 如何在模态表单的输入框中获取窗口网址
- mysql - 生成类似 Discord 的用户名鉴别器的最有效方法是什么?