4

我正在尝试构建一个上传器,它分两步上传渐进式文件:

  1. 上传最小字节数以创建缩略图 (0-10%)
  2. 上传缩略图的其余字节。(11%-100%)

我想这样做是为了让缩略图更早可用,而不必上传单独的缩略图。拍摄一张创建的图像(3426398 字节),jpegtran -copy all -progressive -outfile progressive.jpg original.jpg然后拍摄前 350000 个字节,dd if=progressive.jpg of=thumb.jpg bs=1 count=350000我得到了一个可以工作的缩略图。

有没有办法找出我必须传输多少字节才能获得所有行都可用的图像?因此只会失去图像质量?

4

1 回答 1

6

渐进式 JPEG 图像由一系列“扫描”组成。每次扫描都会为每个 MCU 模块提供更多信息(更多 A/C 系数)。第一次扫描通常只是每个 MCU 的 DC 值。这恰好是获得 1/8 大小的缩略图的完美信息量。

在 JPEG 文件中,每次扫描都以 FFDA 的 SOS(扫描开始)标记开始。为了知道完全保存第一次扫描需要多少数据,只需在文件数据中搜索第二次扫描的开始(第二个 FFDA 标记),您就会得到答案。由于标记字节规则,2 字节序列 FF DA 只能是 SOS 标记。需要对值 FF 后跟 DA 进行编码的压缩数据必须编码为 FF 00 DA。

于 2013-02-18T07:37:34.353 回答