Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 10:35   #1
Pirotexnik
Форумчанин
 
Аватар для Pirotexnik
 
Регистрация: 22.03.2009
Сообщений: 110
По умолчанию Кодирование JEPG. Предсказать алгоритм Хаффмана.

Доброго времени суток!

Вобщем недавно столкнулся с проблеммой:
Необходимо, что бы в картинке после обработки скриптом осталась нужная мне строка. На сам алгоритм повлиять я не могу. Изображение проходит сжатие по Хаффману.

Начал разбиратся в этой теме. Вобщем, появилась идея подобрать такие вхождения, которые после кодировки дадут нужную мне последовательность символов - мою строку.
Задача, теоритически реальна, но моих знаний в областе высшей математики недостаточно.

Суть такова:


Цитата:
Сообщение от копипаста с хакепа
У нас есть текст «00112233011223322113». Как видишь, символы 4,5,6,7,8,9 не используются. Можно ввести следующее обозначение:

00 - 0

11 - 1

22 - 2

33 - 3

01 - 4

12 - 5

23 - 6

32 - 7

21 - 8

13 - 9

Таким образом наш текст можно записать в виде: «0123456789». После подобного преобразования текст стал занимать в два раза меньше объема. Все допустимые символы присутствуют в тексте. Чтобы получить исходный текст, необходимо, согласно обозначению, вновь заменить символы на их комбинацию.
Собсно что я хочу - ручками заменить 0 на <, 1 на ?, 2 на e и тд.

Как? Насколько я понял, я могу править "дерево". Тоесть подобрав нужную частоту, и создав свое дерево, я смогу добится результата.

Все, вроде, просто, но сжатие JEPG имеет "немного" более сложную реализацию, которую я не смог осилить. Там сначала идет сжатие самого изображение со 100% (исходная картинка), до 90% (картинка ПЕРЕД прогоном по хаффману), а после уже уплотнение.

Так вот, любой EXIF заменяется следующим:
Цитата:
CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 90
Вопрос к вам - что за зверь такой, как он устроен. Есть ли хоть 1% вероятность успеха?

Спасибо.
Pirotexnik вне форума Ответить с цитированием
Старый 08.05.2012, 10:55   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Не совсем понятна постановка.
Если "дан алгоритм, который неизвестен и который нельзя менять, но нужно найти строку, которая после пропускания через этот алгоритм становится требуемой", то, боюсь, кроме перебора ничего не существует, а перебор будет продолжаться больше времени существования Вселенной.

PS. То, что Вы описали, не является алгоритмом Хаффмана.
s-andriano вне форума Ответить с цитированием
Старый 08.05.2012, 10:59   #3
Pirotexnik
Форумчанин
 
Аватар для Pirotexnik
 
Регистрация: 22.03.2009
Сообщений: 110
По умолчанию

Вы не поняли.

Нужно не найти строчку. Нужно задать такие входные данные для алгоритма, которы ПОСЛЕ обработки алгоритмом будут содержать нужную мне строку.

p.s. любые JEPG изображения кодируются по Хаффману.

к примеру:
До кодирования --------- после кодирования

asm38sfd93mf93 --------- naskd831w2dj0120d
(Неизвестно) --------- My_string
Pirotexnik вне форума Ответить с цитированием
Старый 08.05.2012, 11:24   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Я правильно понял, что Вам нужно.
Но не понял, чем Вы располагаете.
Если алгоритм для Вас "черный ящик", то только перебор длительностью намного больше, чем можно себе позволить. Т.е. задача практически неразрешимая.
Хаффман - далеко не единственное преобразование, используемое при JPEG сжатии. И то, что Вы описали - не Хаффман.
s-andriano вне форума Ответить с цитированием
Старый 08.05.2012, 11:53   #5
Pirotexnik
Форумчанин
 
Аватар для Pirotexnik
 
Регистрация: 22.03.2009
Сообщений: 110
По умолчанию

Не совсем черный
Цитата:
CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 90
Я надеялся на эту строку.
Pirotexnik вне форума Ответить с цитированием
Старый 08.05.2012, 17:42   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Наверное, можно. Длина текстовой строки будет ограничена 64 символами + понадобится подогнать коэффициенты таблицы квантования и включить их в JPEG. Стандарт такие фокусы позволяет, но любой нормальный кодировщик заменит таблицу квантования своей.


UPD: ну можно ещё "в лоб"

1. Взять картинку (лучше однотонную серую)
2. Изменить 1 байт
3. Пережать определённым кодером с указанным качеством
4. Проверить, изменился ли байт после сжатия. Если изменился - вписать значение ещё раз, и перейти к п.3. Если не изменился - сдвинуть позицию на 1, записать новый байт, перейти к п.3

В итоге удалось втиснуть сторку размером 52 байта, которая сохраняется в файле при пережатии gd-jpeg'ом с качеством 90, отключённой оптимизацией и прогрессией.

000002A0 DA 00 0C 03 01 00 02 11 03 11 00 3F 00 E2 65 92 Ú..........?.âe’
000002B0 48 45 4C 4C 4F 20 57 4F 52 4C 44 20 59 4F 55 52 HELLO WORLD YOUR
000002C0 20 54 45 58 54 20 47 4F 45 53 20 48 45 52 45 20 TEXT GOES HERE
000002D0 42 4C 41 48 20 42 4C 41 48 20 42 4C 41 48 20 41 BLAH BLAH BLAH A
000002E0 4E 44 20 52 45 E4 F7 8A 9A 8A 92 9C A4 6E 4F D2 ND REä÷ŠšŠ’œ¤nOÒ
Изображения
Тип файла: jpg noise_14.jpg (1.2 Кб, 89 просмотров)
Тип файла: jpg noise_13.jpg (1.2 Кб, 79 просмотров)
пыщь

Последний раз редактировалось JTG; 08.05.2012 в 18:52.
JTG вне форума Ответить с цитированием
Старый 09.05.2012, 12:03   #7
Pirotexnik
Форумчанин
 
Аватар для Pirotexnik
 
Регистрация: 22.03.2009
Сообщений: 110
По умолчанию

Хм... Попробовал заменить лобой байт на свой, загрузил, структура сильно изменилась, повторил с той же позицеей - в результате картинка перестала загружатся(

Цитата:
Sorry... That photo could not be added to your profile.
Photos must be in .jpg format.
Pirotexnik вне форума Ответить с цитированием
Старый 09.05.2012, 13:59   #8
Pirotexnik
Форумчанин
 
Аватар для Pirotexnik
 
Регистрация: 22.03.2009
Сообщений: 110
По умолчанию

Получается записать не большие значения, но на некоторых символах картинка просто отказывается грузится(
Pirotexnik вне форума Ответить с цитированием
Старый 10.05.2012, 19:02   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Хз, у меня получилось при помощи XnView (там используется gd-jpeg)
пыщь
JTG вне форума Ответить с цитированием
Старый 11.05.2012, 19:39   #10
Pirotexnik
Форумчанин
 
Аватар для Pirotexnik
 
Регистрация: 22.03.2009
Сообщений: 110
По умолчанию

Ну вот к примеру:
Оригинал
Код:
↕ŢǦʎŁJP…П*Ѓ
—Рбc]A2cP
фǔ§T/0P…ПPǦ
—Рбc]A2c
Измененная версия №1:
Код:
MY_STRINGП*Ѓ
—Рбc]A2cP
фǔ§T/0P…ПPǦ
—Рбc]A2c
Это работает великолепно.

Дальше меняю следующий байт
Код:
MY_STRING2*Ѓ
—Рбc]A2cP
фǔ§T/0P…ПPǦ
—Рбc]A2c
и изображение полностью искажается, и либо перестает быть картинкой, либо после прогона по алгоритму меняется ПОЛНОСТЬЮ заменяя "ME_STRING" другими байтами.

Есть идеи?
Pirotexnik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодирование изображений, предсказать алгоритм Хаффмана Pirotexnik Общие вопросы по программированию, компьютерный форум 0 08.05.2012 10:30
Алгоритм Хаффмана [BeNdeR] Общие вопросы Delphi 0 02.03.2012 20:48
Эффективное кодирование информации методами Шеннона-Фано и Хаффмана в Delphi LoveCookies Помощь студентам 0 06.11.2011 01:19
Алгоритм Хаффмана 0479 Помощь студентам 1 15.09.2010 11:53
Алгоритм Хаффмана. Vetal115 Общие вопросы по Java, Java SE, Kotlin 0 22.04.2010 22:23