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

Это вопрос из любопытства о некоторых шаблонах, которые я вижу в файлах 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, очень легко обнаружить эти шаблоны в окне «Визуализатор данных»; в то время как остальная часть битового потока Хаффмана выглядит как «шум», внезапно появляются блоки, демонстрирующие четкие шаблоны.

Кроме того.. Я не уверен, насколько это актуально, но..:

Ранее я замечал такой тип паттернов и в файлах 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


person HackeyStack    schedule 02.11.2014    source источник
comment
Где в потоке JPEG встречаются эти шаблоны? Какой маркер?   -  person user3344003    schedule 02.11.2014
comment
@ user3344003: Они разбросаны по многим местам в битовом потоке кодирования Хаффмана. т.е. все они появляются где-то между FFDA и FFD9 в конце. На загруженном мной изображении, содержащем их, видно, что FFDA находится по смещению 0x0000027C. Первый экземпляр шаблона находится по адресу 0x0000264A, следующий — по адресу 0x00003AAB и т. д. и т. д. По адресу 0x0001604A их целая куча один за другим. PowerGrep сообщает мне, что находит 75 совпадений шаблона, разбросанных по всей области битового потока кодирования Хаффмана.   -  person HackeyStack    schedule 02.11.2014
comment
Вы пытались декодировать коэффициенты DCT из этих значений?   -  person Jimmy    schedule 02.11.2014
comment
Изображение, которое вы разместили, имеет большие области белого цвета. Коэффициенты AC для каждого сплошного белого MCU будут кодироваться одинаково. Там, где у вас черное на белом, микроконтроллеры компонентов Cb и Cr, вероятно, будут одинаковыми.   -  person user3344003    schedule 02.11.2014


Ответы (2)


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

person Jelman    schedule 02.11.2014
comment
На этом изображении здесь i.imgur.com/XBPelZd.png вы можете увидеть очевидные закономерности на вкладке визуализатора данных с левой стороны. Я также сначала подумал о скрытых тегах, но тогда зачем делать их это очевидными, если они должны быть скрыты? Вы можете быть правы, конечно. На этом втором снимке экрана показано шестнадцатеричное представление и визуализация данных файла JPG размером 5,84 МБ, который называется Tourist-map-of-Europolis.jpg и относится к специальному изданию Dreamfall Chapters Special Edition, которое я купил в Steam пару дней назад. Именно там я впервые обнаружил этот шаблон в формате JPG. Потом я нашел и другие файлы.. - person HackeyStack; 02.11.2014
comment
Да, как я уже сказал, я могу ошибаться, но однажды я где-то слышал, что такие приложения, как Dreamweaver, также помещают их в свои HTML-файлы. В противном случае было бы невозможно увидеть, было ли что-то сделано в WYSIWYG-приложении или, например, в Блокноте. - person Jelman; 02.11.2014

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

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

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

F75EEBDEFDD7BAF7BF75EEBDEFDD7BAF7B

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

F75EEBDEFDD7BAF7B
F75EEBDEFDD7BAF7B

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

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

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

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 так же, как описано выше), вы получите это. strong> Битовый поток кодирования Хаффмана:

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

Я также попытался создать изображение размером 64 x 64 пикселя, разделенное посередине, с левым 32 x 64 пикселя чисто черным цветом (0,0,0) и правым< /strong> 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

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

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

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

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

FFDA
000C03010002110311003F00F99
55540555501
55540555503F
FFD9
person HackeyStack    schedule 02.11.2014
comment
Если MCU состоит из одного цвета, DCT дает все нулевые значения для коэффициентов AC. Таким же образом можно закодировать все 63 нулевых коэффициента. - person user3344003; 03.11.2014