如何计算.jpg文件剔除头部(元数据)后的主体数据字节大小
操作方法
首先明确标准JPEG结构和你的需求对应关系:0xFFDA是扫描开始(SOS)标记,该标记之后直到文件末尾0xFFD9(图像结束EOI)标记之前的所有字节,就是你要的纯图像压缩主体数据,不含你所说的所有头部元数据。
方法1:Python代码实现(适合批量处理、自定义需求)
传入目标jpg路径即可返回主体数据字节数,代码逻辑直接解析JPEG二进制结构,兼容性好:
def get_jpeg_body_size(file_path): with open(file_path, 'rb') as f: data = f.read() # 定位SOS(0xFFDA)标记位置 sos_pos = data.find(b'\xff\xda') if sos_pos == -1: raise ValueError("输入不是合法的JPEG文件") # 跳过SOS标记本身和其后的可变长度头 sos_header_len = data[sos_pos + 2] * 256 + data[sos_pos + 3] body_start = sos_pos + 2 + sos_header_len # 定位EOI(0xFFD9)标记位置 eoi_pos = data.rfind(b'\xff\xd9') if eoi_pos == -1: # 兼容无EOI的非规范JPEG,直接取到文件末尾 eoi_pos = len(data) return eoi_pos - body_start # 调用示例 print(get_jpeg_body_size("你的目标文件.jpg"))
方法2:命令行快速查询(适合单文件临时使用)
如果安装了exiftool工具,直接执行以下命令即可输出结果:
exiftool -b -ImageData 你的目标文件路径.jpg | wc -c
安装提示:Debian/Ubuntu系统可执行
sudo apt install libimage-exiftool-perl安装,macOS可执行brew install exiftool安装。
注意:以上方法仅对标准格式的JPEG文件有效,损坏的、非标准封装的JPEG可能返回结果不符合预期。
内容的提问来源于stack exchange,提问作者amin
相关产品推荐
相关产品推荐

