Почему эти шаблоны в кодировках битов Хаффмана используются в файлах JPG (созданных в Photoshop?)?

Это вопрос, из любопытства, о некоторых шаблонах, которые я вижу в файлах JPG, когда смотрю на них в шестнадцатеричном редакторе. Я предполагаю, что это вопрос о формате файла JPEG; почему эта часть не является "случайным шумом", как остальные, когда это должно быть (кодирование Хаффмана и т. д.).

Вот оно:

Этот 136-битный (17 байт) шаблон отображается в некоторых файлах JPG, созданных Adobe Photoshop (я не знаю, является ли Photoshop единственным приложением, которое их производит):

F7 5E EB DE FD D7 BA F7 BF 75 EE BD EF DD 7B AF 7B

Это несколько мест в одном файле, иногда это всего лишь одна итерация, в других случаях она повторяется, как 8 или 12 раз, составляя блоки из 1088 бит или 1632 бит блоков. Или, если быть точным, это на самом деле 68-битный шаблон, повторяемый 2 или более раз:

F7 5E EB DE FD D7 BA F7 B

11110111010111101110101111011110111111011101011110111010111101111011

AFAIK, прочитав немного о файловой структуре JPG, а также проверив это в шестнадцатеричном формате, что начало файловых структур JPG помечено FF xx. Нет таких маркеров структуры FF xx ни непосредственно перед, ни после этих 68-битных шаблонов.

Используя Breakpoint Hex Workshop, очень легко обнаружить эти шаблоны в окне "Data Visualizer"; в то время как остальная часть потока битов Хаффмана выглядит как "шум", внезапно появляются блоки, показывающие четкие шаблоны.

Также.. Я не уверен, насколько это актуально, но..:

Ранее я заметил такой тип шаблонов и в файлах CR2, то есть в файлах Canon RAW; здесь шаблон был намного проще 40-битного, хотя:

73 9C E7 39 CE

0111 0011 1001 1100 1110 0111 0011 1001 1100 1110

Если я корректирую пробелы, это становится так:

01110 01110 01110 01110 01110 01110 01110 01110

Как вы можете видеть, это на самом деле повторяющийся 5-битный шаблон, и он повторялся несколько сотен раз для каждого места, где он появился в файлах CR2. Формат файла CR2 также является сжатым файлом, но без потерь. С другой стороны, кодирование Хаффмана в JPG также является своего рода "сжатием без потерь", если я правильно понял.

Я нахожу очень странным, что в сжатых потоках есть эти паттерны (которые мне кажутся) "потраченными впустую" битами..

Я загрузил один из файлов JPG здесь http://i.imgur.com/t0mi7vo.jpg - это просто скриншот некоторых файлов в папке. Поток битов кода Хаффмана идет от смещения 0x0000027C до конца, и вы можете увидеть один из экземпляров повторяющегося шаблона, например, со смещением 0x0001604A

2 ответа

Решение

User3344003, большое спасибо за ваш ответ, он на 99,9% правильный..!:-)

Эти узоры, как вы написали, связаны с большими областями цвета!

Однако именно черный цвет (0,0,0) создает этот конкретный узор:

F75EEBDEFDD7BAF7BF75EEBDEFDD7BAF7B

..или, если разделены на 2 х 68-битных частей;

F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF7B

Чтобы увидеть это в действии:

1) Создайте изображение размером 32 x 32 пикселя, заполненное чистым черным (0,0,0) в Photoshop.

2) Выберите Файл -> Сохранить для Web и устройств.

3) Выберите JPEG с максимальным (Качество = 100), Размытостью = 0 и всеми параметрами Прогрессивный / Оптимизированный / Встраивать цветовой профиль / Преобразовать в sRGB = ВЫКЛ, Метаданные = Нет.

Теперь, когда вы посмотрите на изображение в шестнадцатеричном редакторе, оно покажет этот битовый поток кодирования Хаффмана:

FFDA
000C03010002110311003F00F9FF00FB
F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF
FFD9

Как видите, он содержит почти 8 экземпляров 68-битного шаблона.

Точно так же, если вместо этого вы создадите изображение размером 32 x 32 пикселя, заполненное чистым белым (255 255 255) (и сохраните его в формате JPEG таким же образом, как описано выше), вы получите поток битов кодирования Хаффмана:

FFDA
000C03010002110311003F00DFE3DFBA
F75EF7EEBDD7BDFBA
F75EF7EEBDD7BDFBA
F75EF7EEBDD7BDFBA
F75EF7EEBDD7BDFBA
F75EF7EEBDD7BDFBA
F75EF7EEBDD7BDFBA
F75EF7EEBDD7BDFBA
F75EF7EEBDD7  F
FFD9

Я также попытался создать изображение размером 64 x 64 пикселя, разделенное по центру, при этом левый 32 x 64 пикселя чисто черный (0,0,0), а правые 32 x 64 пикселя чисто белый (255 255 255). Затем сохранен в формате JPEG с качеством = 100 и т. Д. И т. Д. Затем я получил поток битов кодирования Хаффмана:

FFDA
000C03010002110311003F00F9FF00FB
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAFBFC7B
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAF803FB
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAFBFC7B
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAF803FB
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAFBFC7B
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAF803FB
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAFBFC7B
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAF803FB
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAFBFC7B
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAF803FB
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAFBFC7B
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAF803FB
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAFBFC7B
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAF803FB
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BAFBFC7B
F75EEBDEFDD7BAF   7B
F75EEBDEFDD7BA
FFD9

Когда я узнал об этом, я сначала подумал: "Но разве это не то, что кодирование Хаффмана должно быть более эффективным, чем.. это..!? 8 одинаковых шаблонов в чистых цветных 32 x 32 пиксельных и 16 + 8 + 8 идентичные в 64 пикселях x 64 пикселя наполовину черный / наполовину белый... Почему бы просто не использовать один, а затем использовать указатели, например, использовать этот конкретный шаблон здесь, здесь, там и... там."

Затем я вспомнил тот факт, что эти JPEG-файлы на самом деле довольно необычны тем, что все они сделаны с качеством = 100.

Таким образом, качество = 100, похоже, является еще одним фактором, который необходим для просмотра этих моделей F75E..

Чтобы убедиться в этом, я снова сделал черный (32,0 x 32) черного цвета (0,0,0), но теперь я сохранил его с Quality = 0. Теперь это изображение получило намного более короткий поток битов Huffman Coding, который действительно также демонстрировал определенный тип шаблона, но совершенно другой:

FFDA
000C03010002110311003F00F99
55540555501
55540555503F
FFD9

Поправьте меня, если я ошибаюсь, но я думаю, что это может быть какой-то "план" для проверки, был ли использован фотошоп. Может быть, все это связано с пиратством

Другие вопросы по тегам