【问题标题】:How to find .jpg file size without headers?如何查找没有标题的 .jpg 文件大小?
【发布时间】:2021-08-06 19:31:30
【问题描述】:

我需要找到没有标题(或元数据)的.jpg 文件的大小。我该怎么做?

我猜JPEG数据包含两部分:

  1. 与图像无关且包含二次采样值或量化表信息的标头或元数据
  2. 主要数据是图像压缩的结果,依赖于图像。出于某种原因,我只关心主要数据的大小。如何获取大小(以字节为单位)?

【问题讨论】:

  • 请尝试解释您实际拥有的东西。以及为什么您只有图像的一部分。目前没有多大意义。
  • 你好@MarkSetchell。我正在研究一种新的压缩方法,它取决于主要数据的大小。所以我们可以说我有img.jpg,我需要它的主要数据的大小。您需要更多信息吗?
  • 您需要阅读 JFIF 和 EXIF 格式,并决定您认为哪些区域是“主要数据”并自行计算。
  • 这可能有用:pypi.org/project/exif-delete
  • @amin 我建议你做一些研究,并且更具体。您可以在 Wikipedia 中阅读有关 JPEG Syntax and structure 的信息。看起来您正在寻找 SOS 有效负载的大小。另外,删除 jpeg2000 标签,因为它似乎与您的问题无关。

标签: python image-processing compression jpeg jpeg2000


【解决方案1】:

感谢 cmets。正如 Anon Coward 所说,我发现这张有用的图像显示了 JPEG 文件的不同部分:

我想要Image Data 的长度,所以我需要找到0xFF 0xDA 并从那里计算字节数,然后从中减去16。代码如下:

def get_JPEG_size(file_path):
  total_size = os.path.getsize(file_path)

  with open(file_path, 'rb') as f:
    s = f.read()
  
  header_size = s.find(b'\xff\xda')
  if header_size == -1:
    print("`FF DA` not found!")
    return 0
  header_size += (2 + 12) + 2
  
  data_size = total_size - header_size

  return data_size

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 2011-08-10
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多