1

私はこれを無駄に探していました。各プログレッシブ JPEG レイヤー/スキャンが発生するバイト オフセットを抽出できるようにしたいと考えています。

たとえば、100 kB の画像に、最終的な画像をレンダリングするために使用される 5 つのレイヤーがあるとします。レイヤー 1 は kB 5 で終了し、レイヤー 2 は kB 20 で終了し、レイヤー 3 は kB 60 で終了します (たとえば)。

これにImagemagickを使用することは可能ですか? このidentifyツールは、これをサポートしていないようです。もしそうなら、どのように?そうでなければ、どのツールでこれを達成できますか? カスタム JPEG パーサーを作成する必要はありません。ありがとう。

4

3 に答える 3

1

テスト用にImageMagickを使用して、次のようなプログレッシブ JPEG を作成できます。

magick -interlace plane -size 400x200 gradient: progressive.jpg

exiftool次のように、それについて多くのことを教えてくれます。

  exiftool -v3 progressive.jpg

サンプル出力

  ExifToolVersion = 12.00
  FileName = progressive.jpg
  Directory = .
  FileSize = 2709
  FileModifyDate = 1620144585
  FileAccessDate = 1620144586
  FileInodeChangeDate = 1620144585
  FilePermissions = 33188
  FileType = JPEG
  FileTypeExtension = JPG
  MIMEType = image/jpeg
JPEG APP0 (14 bytes):
    0006: 4a 46 49 46 00 01 01 00 00 01 00 01 00 00       [JFIF..........]
  + [BinaryData directory, 9 bytes]
  | JFIFVersion = 1 1
  | - Tag 0x0000 (2 bytes, int8u[2]):
  |     000b: 01 01                                           [..]
  | ResolutionUnit = 0
  | - Tag 0x0002 (1 bytes, int8u[1]):
  |     000d: 00                                              [.]
  | XResolution = 1
  | - Tag 0x0003 (2 bytes, int16u[1]):
  |     000e: 00 01                                           [..]
  | YResolution = 1
  | - Tag 0x0005 (2 bytes, int16u[1]):
  |     0010: 00 01                                           [..]
  | ThumbnailWidth = 0
  | - Tag 0x0007 (1 bytes, int8u[1]):
  |     0012: 00                                              [.]
  | ThumbnailHeight = 0
  | - Tag 0x0008 (1 bytes, int8u[1]):
  |     0013: 00                                              [.]
JPEG DQT (65 bytes):
    0018: 00 03 02 02 02 02 02 03 02 02 02 03 03 03 03 04 [................]
    0028: 06 04 04 04 04 04 08 06 06 05 06 09 08 0a 0a 09 [................]
    0038: 08 09 09 0a 0c 0f 0c 0a 0b 0e 0b 09 09 0d 11 0d [................]
    0048: 0e 0f 10 10 11 10 0a 0c 12 13 12 10 13 0f 10 10 [................]
    0058: 10                                              [.]
JPEG SOF2 (9 bytes):
    005d: 08 00 c8 01 90 01 01 11 00                      [.........]
  ImageWidth = 400
  ImageHeight = 200
  EncodingProcess = 2
  BitsPerSample = 8
  ColorComponents = 1
JPEG DHT (20 bytes):
    006a: 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 [................]
    007a: 00 00 04 08                                     [....]
JPEG SOS
JPEG DHT (19 bytes):
    0139: 10 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
    0149: 00 00 12                                        [...]
JPEG SOS
JPEG DHT (18 bytes):
    0468: 10 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
    0478: 00 a0                                           [..]
JPEG SOS
JPEG DHT (20 bytes):
    048a: 10 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 [................]
    049a: 00 71 00 70                                     [.q.p]
JPEG SOS
JPEG SOS
JPEG DHT (21 bytes):
    0728: 10 00 03 01 00 00 00 00 00 00 00 00 00 00 00 00 [................]
    0738: 00 01 71 00 50                                  [..q.P]
JPEG SOS
JPEG EOI

また、次のような SOS マーカーを見つけることもできます。

xxd -c16 -g1 -u progressive.jpg | grep --color=always -A4 "FF DA"
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 04 08 FF DA  ................
00000080: 00 08 01 01 00 00 00 01 D4 60 00 00 00 00 00 08  .........`......
00000090: 40 00 00 00 00 00 11 00 00 00 00 00 00 21 00 00  @............!..
000000a0: 00 00 00 00 42 00 00 00 00 00 00 88 00 00 00 00  ....B...........
000000b0: 00 01 08 00 00 00 00 00 02 10 00 00 00 00 00 04  ................
--
00000140: 00 00 00 00 00 00 00 00 00 00 00 12 FF DA 00 08  ................
00000150: 01 01 00 01 05 02 B5 AD 6B 5A D6 B5 AD 6B 5A D6  ........kZ...kZ.
00000160: B5 AD 6B 5A D6 B5 AD 6B 5A D6 B5 AD 6B 5A D6 B5  ..kZ...kZ...kZ..
00000170: AD 6B 5A D6 B5 AD 6B 5A D6 B5 AD 6B 5A D6 B5 AD  .kZ...kZ...kZ...
00000180: 6B 5A D6 B5 AD 6B 5A D6 B5 AD 6B 5A D6 B5 AD 6B  kZ...kZ...kZ...k

マーカーが 16 バイトの行末を超えた場合、いくつかのマーカーを見逃す可能性があります。両方のリストの境界に落ちないように、4 バイトのオフセットで 2 回実行することもできます。

別の方法として、ここで別の回答を行いました。これにより、TIFF ヘッダーの検索からFF DA.

于 2021-05-04T16:21:12.437 に答える