Как стать автором
Обновить

Комментарии 34

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

А хороший автор — даже из пикселя, увлекшись, напишет отличный пост.

P.S. Ну что сделает с таким постом «редактор ТМ» — тоже понятно )
Можно вспомнить и про
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
Что туда в src только не пробовал пихать народ в свое время.
Начиная с "about:blank" и "#", заканчивая всякими "//:0" и "file://", варианты в сочетании с opacity:0, чтобы не было видно «битой картинки» и т.д.
Веселое было времечко.
Странно, но забыли классику — формат BMP, у меня он занял 68 байт.
При сохранении в Monochrome Bitmap у меня вышло 66 байт.
Вы, вероятно, выбрали двухцветный BMP, в котором 8 байт тратится на палитру, а сам файл округляется до длины, кратной 4 байтам. В данном случае выгоднее использовать полноцветный, 32-битный или 24-битный BMP без палитры. У меня такой BMP занимает уже 58 байт, даже с поддержкой полупрозрачности.

Но и это ещё не всё! Современный софт использует заголовки BMP версии 3 и выше, потому что только они поддерживают 32-битный цвет, но для 24бит/пиксель можно также использовать и BMP старой версии, с BITMAPINFO версии BITMAPCOREHEADER (12 байт), а не BITMAPINFOHEADER (40 байт). Так можно сэкономить ещё 28 байт.

Итого, вот BMP 24bpp 1х1, размером 30 байт:
42 4D 1E 00 00 00 00 00 00 00 1A 00 00 00 0C 00
00 00 01 00 01 00 01 00 18 00 FF FF FF 00
Напомнило старую умозрительную задачу о том, как при помощи палки длинной 1 м и ножа записать большой текст одним движением.

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

У ножа, грубо говоря, и то толщина есть. У линейки — точность нанесения рисок (но мы, скажем, возьмем ту же линейку и для восстановления), и ширина самих рисок. Установить линейку можно так же, точно в «начале палки», или с еле заметным сдвигом. Сдвиг может быть и при попытке поставить метку ножом. Ну и, конечно, нужно где-то хранить число «букв» в записанной фразе, а то «точность измерения» — штука такая, можно много знаков после запятой писать )

Ну и как точно отмерять 0.5789432687357483905 м. с такими допущениями… А уж, в сравнении с ним, 0.5789432687357483905574832967589432675439679443214 насколько труднее окажется к воспроизведению? )

А если говорить о числе записанных символов, то это будет как китайская флешка с безлимитной емкостью — писать-то можно, а вот прочесть не получится.
Чисто из занудства — штангенциркуль даёт точность измерения порядка 0.01 мм. Итого получаем 100к различимых рисок на палке. Если применить ещё какой-нибудь препроцессинг (типа кодов Голомба для сжатия видео), то получим вполне неплохой текст.
Не сравнивайте точность измерения и точность, с которой вы считаете данные сами. Хотя бы потому, что риски не в заранее заданных точностью штангенциркуля (!!) точках будут стоять, а в произвольном месте палки будет зарубка ножом. «Аналоговая» такая запись, теплая-ламповая :)

Это сокрее вопрос вероятностный, и, скорее всего, первые цифры (не буквы текста, а именно цифры считанного значения) будут точны с высокой вероятностью, то каждая следующая цифра будет все менее вероятно истинной. И что 20-й знак после запятой у вас 4, а не 5 — это уж вопрос веры окажется.
Закодировал число, отмерил его на штангенциркуле, закрутил гайку. Приложил к палке, царапнул палку лапкой штангенциркуля. Даже нож не нужен. Если декодирование производится тем же самым штангелем, то можно схлопотать ошибку в последнем знаке — согласен.

Пример из жизни — при помощи такого же инструмента (штангель + глубиномер) в домашних условиях юстируется рабочий отрезок фотоаппарата. Точность измерений там похожая — до долей миллиметров. Процесс исчерпывающе описан в книге Майзенберга.
Это у вас штангель метровой длины?

Усугубить легко: считывать тем же штангелем — это хорошая хохма, но давайте тогда и показания прямо на нем не сбрасывать, а? Прямо установили 12 см 37.14 мм, риску на палке нарисовали для проформы (но не сильно, чтобы не сдвинуть показания), и быстрее записали свои «0.123714» на бумажку, пока штангель не «ушел» и пока число в голове. ) Тепличные условия — они много гипотез потвердили, но мы-то все же понимаем, что такое практика, правда?

А если серьезно, как вы штангелем с точностью 0.01 мм отметите хотя бы 50 знаков после запятой на деревянном бруске, так, чтобы кто-то (лучше другой человек, но пусть даже вы сами) же через время (скажем — через день), даже этим же, а лучше другим штангелем прочитаете их с приличной точностью (ну, скажем, чтобы только последний символ текста, а не цифровой знак, как вы предположили) был неуверенно считан?
50 знаков после запятой — никак. 100к различимых значений дают диапазон величин от 0 до 1 с точностью до 0.00001, а это всего 5 знаков. На палке метровой длины это соответствует точности 0.01 мм, которую даёт измерительный прибор. Читайте внимательно.
Вы уже определитесь, вы сами берете точность 0.01 мм, из нее вычисляете зачем-то число различимых рисок в виде 100К, затем из 100К делаете вывод про точность в 0.00001 (чего?). На отрезке в метр, оно, наверное, и неплохо, но а) как штангелем мерять метровую палку, б) как вы нанесете вполне себе физическим маркером (ножом, он есть в условии задачи) риску так, чтобы удалось ее отличить от (ваше число) 100К точно таких же на отрезве в метр? Риска ваша должна быть, тогда, шириной 0.01 мм, и вы должны с похожей точностью потом ее положение считать.

Хорошо, так сколько знаков «на палке» можно записать, чтобы их потом можно было бы прочитать? 5, как я вашу мысль понял? Т.е. на метре палки смогли записать 5 букв? Там в задаче про «большой текст» речь идет )
Объясняю:
  • Штангель даёт точность измерения 10^-5 м. На метровой палке это 10^5 различимых положений риски.
  • Одному концу палки ставим в соответствие число 0.00000, второму — число 0.99999. Любая риска на палке представима в виде десятичной дроби: 0.12375 — риска на расстоянии 12.375 см от начала палки.
  • Кодируем входной текст арифметическим кодером. Получаем десятичную дробь, например 0.32974. Делаем риску на расстоянии 32.974 см от начала палки (или обрезаем палку, что гораздо проще, т. к. не нужно будет потом искать риску; кроме того, это не нарушает условий исходной задачи).


Длина текста, который можно закодировать, записит от распределения вероятностей символов алфавита.
Метровый штангель в природе есть, например ШЦ-1000. Это, конечно, дичь (и стоит около 12к), но он существует.
Отпилить нельзя, там условие как раз «при помощи палки длинной 1 м и ножа записать большой текст одним движением» — вы не отпилите палку одним движением ножа )

Нож у вас какой ширины? Я бы предложил как вариант 0,3-0.5 мм взять. Раз так, что можно о «точности ножа» говорить, а не о точности штангеля.

По сути, к тому и прошли: «большой текст» одной меткой записать трудно.
НЛО прилетело и опубликовало эту надпись здесь
100k вариантов — это 16 бит, два байта. Препроцессинг вряд ли поможет
PNG с одним белым пикселем не обязательно будет 67 байт занимать, скорее всего он будет значительно больше. Например paint.net сохраняет такую картинку в файл размером 156 байт, mspaint выдаёт 119 байт, 67 становится уже после обработки.
А ещё туда можно RAR с понями на 4Гб засунуть
Rar привычнее засовывать в jpeg
Но основной довесок в данном случае действительно составляет информация о сохраняющем картинку ПО.

Отличный пост! Уже несколько месяцев не могу разобраться с одной проблемой, и тут вы :) Может кто поможет разобраться?
Есть железка, в которую можно по UDP загружать и скачивать изображения. Самое странное, при скачивании изменяется формат загруженного изображения, в итоге приходят такие данные:


Первый файл:
HEX bytes (24):


fefefefefefefefe00000000000fd2003ac800403ac80040

Известно: размер изображения 1920х1080, цвет полностью черный (#000000)


Второй файл:
HEX bytes (24):


fefefefefefefefe00000000000fd2003ac660fa3acefcfa

Известно: размер изображения 1920х1080, цвет полностью красный (‪#‎FF0000‬)


Примерные форматы: rec 709, YUV, 4:2:2

многие веб сервисы пересоздают картинку при загрузке чтобы избавиться от эксплойтов, rarjpg и прочего.
Проверил в Firefox и Chrome — не открывают, предлагают скачать и сохранить как любой другой неизвестный бинарник.
Как раз хотел про него написать, вспомнив старые телефоны. Интересно, а что бы SVG показал?
Я, правда, не знаю как у вас там в браузерах, но у нас в играх не используют однопиксельные изображения, потому что видеокарта все равно будет одинаково производительна как на 32, так и на 1 пиксельной картинке(если не ошибаюсь, она все равно будет растянута до 32х32, для оптимизации памяти)
Кроме того, для PVRTC компрессии минимальный размер — 4х4.
Вроде же современные браузеры работают с GPU…
Допускаю конечно, что глупость сморозил, но все же :)
В ответ Orly, редактор блога
Это настоящее имя? O_o

Orly?
image

:D
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории