4

プログレッシブ ファイルを 2 つのステップでアップロードするアップローダーを構築しようとしています。

  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 (スキャン開始) マーカーで始まります。最初のスキャンを完全に保持するために必要なデータ量を知るには、2 回目のスキャンの開始 (2 番目の FFDA マーカー) のファイル データを検索するだけで答えが得られます。マーカー バイトの規則により、2 バイト シーケンスの FF DA は SOS マーカー以外にはなりません。値 FF の後に DA をエンコードする必要がある圧縮データは、FF 00 DA としてエンコードする必要があります。

于 2013-02-18T07:37:34.353 に答える