Сейчас на форуме: Kybyx (+1 невидимый пользователь)

 eXeL@B —› Оффтоп —› Максимальная компрессия картинок
. 1 . 2 . 3 . >>
Посл.ответ Сообщение

Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 14:51 · Поправил: SDK
· Личное сообщение · #1

Всех С Новым Годом - Большим Доходом!
Хотел у вас спросить какой самый маленький формат сжатия картинки. вот пример.

(его и нужно ужать разрешение менять нельзя)
хочу узнать самый максимум до скольки можно ужать (например 2кб) и потом архиватором например 7z kgb zip уже ужать еще раза в 3-4 ну например до 0.1 кб вот интересно реально ли это сделать или нет .
и если реально то как бы вы решили задачу а если нет то почему.
(Алгоритм задания.\Уменьшить размер без уменьшения разрешения но можно использовать конвертирование в другой формат, что бы оригинал был больше его копии ,а потом копию и оригинал тоже сжать архиватором и получить разницу раз в 5.)
Всем спасибо.Если есть вопросы я уточню.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 01 января 2020 15:21 · Поправил: _MBK_
· Личное сообщение · #2

По скриншоту не понять, картинка однобитная или с полутонами?
Сжатие без потерь или с потерями?



Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 15:28 · Поправил: SDK
· Личное сообщение · #3

_MBK_ пишет:
Сжатие без потерь

фон белый буква Р ярко жёлтого цвета всё остальное можно менять как угодно что бы выжать максимум.
ссылка на картинку --> Link <-- для теста.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 01 января 2020 15:36
· Личное сообщение · #4

Все равно не совсем пойму цель задачи. Если картинка однобитная и все ступеньки одинаковые, то она содержит количество информации на первый взгляд примерно около полутора килобит, ну еще чуть чуть компрессией можно поджать - это и будет нижним порогом к которому надо стремиться. Или это нетипичная картинка и могут быть принципиально другого вида например разноцветные? Или нужен сам принцип сжатия?



Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 15:49 · Поправил: SDK
· Личное сообщение · #5

_MBK_ цель задачи. найти порог который уже нельзя перепрыгнуть например файл 1.jpg с максимальной компрессией без потери качества будет 1кб потом мы его попробуем ужать архиватором и он (или ужмётся или нет ) например еще ужмётся например до 1.kgb - 800 байт и вот тут уже буду думать я как мне перепрыгнуть это значение должно быть например 400-500байт для файла 1.jpg сжатого kgb архиватором
картинки могут быть и других цветов например их может быть 16 - (7 цветов и оттенки если я правильно помню) чёрный это чёрный 8-й.

А уточняю я у вас что бы когда я скажу что смог уменьшить размер 5 кб jpg файла до 500-600 байт мне не сказали да ладно так все могут (ишь что удумали вы там с фоксом в муре) поэтому мне нужно узнать порог а дальше я попробую справится с этой задачей если получится результат вам дам если нет скажу что не получилось.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 01 января 2020 15:49
· Личное сообщение · #6

Как вариант алгоритмизации - обход по контуру. Допустим, все ступеньки одинаковые, тогда кодируем шаг влево 10, шаг вправо 11 шаг вперед 0. Весь контур будет таким образом описан количеством информации где то 300 с чем то бит.

| Сообщение посчитали полезным: SDK

Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 15:54 · Поправил: SDK
· Личное сообщение · #7

_MBK_ пишет:
Как вариант алгоритмизации - обход по контуру. Допустим, все ступеньки одинаковые, тогда кодируем шаг влево 10, шаг вправо 11 шаг вперед 0. Весь контур будет таким образом описан количеством информации где то 300 с чем то бит.

я об этом думал но программа вывода должна с картинкой не привышать 700 байт под виндовс это не возможно значит остаётся дос или zx через команду принт но там эмулятор всё сожрёт .остаётся только дос



Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 01 января 2020 16:02
· Личное сообщение · #8

Не совсем пойму почему невозможно под виндой уложиться в это значение? Асмовский код побитной отрисовки вместе с битовой последовательностью вполне в 700 байт уложится имхо. Даже если в лоб безо всякого обхода полтора килобита кодировать уложится тоже.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 01 января 2020 16:03
· Личное сообщение · #9

_MBK_

> обход по контуру

--> Link <--

-----
vx




Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 01 января 2020 16:14 · Поправил: _MBK_
· Личное сообщение · #10

Еще идея как получить искомые пороговые две-три сотни бит более простым алгоритмом.
Разбиваем фигуру на строки (примерно 20-30 строк всего), каждая строка состоит из последовательностей белых и желтых квадратов. Длина каждой последовательности укладывается в пять бит - итого 10 бит на строку. Бинго!



Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 16:42
· Личное сообщение · #11

_MBK_ пишет:
Еще идея как получить искомые пороговые две-три сотни бит более простым алгоритмом.
Разбиваем фигуру на строки (примерно 20-30 строк всего), каждая строка состоит из последовательностей белых и желтых квадратов. Длина каждой последовательности укладывается в пять бит - итого 10 бит на строку. Бинго!

Великолепная идея мне нравится,это как я придумал взять максимально сжатый exe записать в строку Hex в картинку и назад в Hex через программу распознавания цифр и букв в теории очень интересно на практике я вышел за предел размера exe как не хитрил с картинкой... если вы сможете это реализовать вывод по строчно таких картинок под win32 на asm то вы круче меня на порядок я по ка что такое не умею попробуйте может у вас получится интересный проект по компрессии которому нет аналогов.

а я что придумал возьмём уйдём в командную строку в ней есть цвета \

0 = Черный 8 = Серый
1 = Синий 9 = Светло-синий
2 = Зеленый A = Светло-зеленый
3 = Голубой B = Светло-голубой
4 = Красный C = Светло-красный
5 = Лиловый D = Светло-лиловый
6 = Желтый E = Светло-желтый
7 = Белый F = Ярко-белый
зная их мы сможем буквами и цифрами выводить цвета в командную строку.
читая из отдельного файла 1.txt у нас есть ascii Рисовалки и с помошью их мы нарисуем картинку фон белый F а значёк рентв ярко желтый E остаётся собрать бат файл выводяший последовательность потом сам батник и текстовый файл картинки сожмём kgb или zip и у нас получится ~ 700 байт а оригинал ну в таком же архиве будет ~3 000 байт как то так



Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 01 января 2020 16:52 · Поправил: _MBK_
· Личное сообщение · #12

Все ж не пойму для чего такое надо тем более, с досовской командной строки?
Под виндой рисовать сложного ничего нет, есть же GDIшная функция отрисовки заполненного прямоугольника, просто отрисовываем в двух вложенных циклах белые и желтые прямоугольники и все.
А впрочем даже второй цикл и не нужен, просто цикл по строкам внутри которого рисуются белые и желтые прямоугольники



Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 16:59
· Личное сообщение · #13

_MBK_ пишет:
Все ж не пойму для чего такое надо тем более, с досовской командной строки?
Под виндой рисовать сложного ничего нет, есть же GDIшная функция отрисовки заполненного прямоугольника, просто отрисовываем в двух вложенных циклах белые и желтые прямоугольники и все.

я отстал от технологий я вам свою идею соберу до рабочего вида и покажу а вы попробуйте по своему я хотел бы увидеть такое чудо если оно уместится еще и в 700байт в архиве это не слабо так.




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 января 2020 17:01 · Поправил: f13nd
· Личное сообщение · #14

16 цветов 0..f это 4 бита, кодируя каждый пиксель символом ты кодируешь в лучшем случае 8 битами (уже заявка на гениальную затею), и потом на это ты предлагаешь кастануть какой-нибудь рандомный архиватор (даже не конкретный кодер+кодек, а архиватор пусть что-нибудь выберет). А главное потом можно будет поупражнявшись в сжимании скриншота разными архиваторами заявить, что твой батник с 8х12 пикселями сжимается лучше, чем растянутая и сглаженная картинка.

-----
2 оттенка серого




Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 17:06
· Личное сообщение · #15

f13nd пишет:
16 цветов 0..f это 4 бита, кодируя каждый пиксель символом ты кодируешь в лучшем случае 8 битами (уже заявка на гениальную затею), и потом на это ты предлагаешь кастануть какой-нибудь рандомный архиватор (даже не конкретный кодер+кодек, а архиватор пусть что-нибудь выберет). А главное потом можно будет поупражнявшись в сжимании скриншота разными архиваторами заявить, что твой батник с 8х12 пикселями сжимается лучше, чем растянутая и сглаженная картинка.

Именно это я и хотел сказать только не знал как




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 января 2020 17:11
· Личное сообщение · #16

_MBK_ пишет:
каждая строка состоит из последовательностей белых и желтых квадратов

Это называется Run-length encoding, когда ты задаешь последовательность из n элементов значения m просто двумя полями n и m. Черные квадраты малевичей сжимаются таким образом пугающе сильно.

-----
2 оттенка серого




Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 18:54
· Личное сообщение · #17


вот как то так получилось _MBK_



Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 01 января 2020 19:38
· Личное сообщение · #18

Подумаешь, у меня ровно 700 в неупакованном HTML
Code:
  1. <!DOCTYPE HTML>
  2. <html>
  3. <body>
  4.  
  5. <canvas id="myCanvas" width="500" height="500" style="border:1px solid #c3c3c3;">
  6. Ваш браузер не поддерживает элемент canvas.
  7. </canvas>
  8. <script type="text/javascript">
  9. var c=document.getElementById("myCanvas");
  10. var cxt=c.getContext("2d");
  11. cxt.fillStyle="#FFFF00";
  12. var lines=[[15,3,0],[11,8,0],[8,12,0],[8,14,0],[8,16,0],[8,17,0],[8,19,0],[8,8,-1],[18,10,0],[8,8,-1],[20,10,0],[0,31,0],[1,30,0],[3,27,0],[4,25,0],[7,21,0],[9,18,0],[10,7,0],[10,7,0],[10,7,0],[10,7,0],[10,7,0],[10,7,0],[10,6,0],[10,3,0]];
  13. var k=0;
  14. for(var i=0;i<lines.length;i++)
  15. {
  16. cxt.fillRect(lines[i][0]*10,k*10,lines[i][1]*10,10);
  17. k+=(lines[i][2]+1);
  18. }
  19. </script>
  20. </body>
  21. </html>
  22.  




Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 01 января 2020 21:23
· Личное сообщение · #19

_MBK_ Да у вас получилось еще лучше от оригинала в 10 раз меньше 363 байт под архивом,
можно таким образом сделать 5-10 слайдов и получится считай демо а звук можно записать строчкой кода
Code:
  1. Left Channel:
  2. ([1.122,1.259,1.498,1.681,1.887][((>> 12) ^ ((>> 10)+ 3561)) %5]) * t & 128 | (([1.122,1.259,1.498,1.681,1.887][((>> 11) ^ ((>> 9) +2137)) %5]) * t) & ((t>>14)%120+8) | (t>>4) 
  3. Right Channel:
  4. ([1.122,1.259,1.498,1.681,1.887][((>> 12) ^ ((>> 10)+ 3561)) %5]) * t & 128 | (([1.122,1.259,1.498,1.681,1.887][((>> 11) ^ ((>> 9) +2137)) %5]) * t) & ((t>>14)%120+8) | (t>>5)

а вот проигрыватель http://wurstcaptures.untergrund.net/music/ тоже интересно придумано так что если развивать идеи можно что угодно придумать и в разные журналы писать.




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 января 2020 04:39 · Поправил: f13nd
· Личное сообщение · #20

SDK пишет:
и в разные журналы писать

Можно в рентв написать о том, что их символика аномально сильно сжимается RLE, да еще ровно до 700 байт и у этого должна быть какая-то мистическая или конспирологическая причина.

-----
2 оттенка серого




Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 02 января 2020 08:29
· Личное сообщение · #21

f13nd пишет:
700 байт и у этого должна быть какая-то мистическая или конспирологическая причина.

-----

Это же 42*1*2/3*5*5



Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 02 января 2020 09:26
· Личное сообщение · #22

f13nd ну сделал бы демку под спек с музычкой до 48кб или под win32 хоть в браузере как _MBK_
с музычкой с скролом с спрайтами в 2-1.5кб без сжатия вот удивил бы нас




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 января 2020 09:49
· Личное сообщение · #23

Ничего, что эта шляпа, кодированная в 16-цветном bmp 718 байт весит? Ничего, что 7z его сжимает до 259? --> Link <--

Добавлено спустя 0 минут
SDK, мне по-твоему совсем нечем заняться?

-----
2 оттенка серого




Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 02 января 2020 10:05
· Личное сообщение · #24

так Вы молодой человек f13nd разрешение уменьшил (а задание было не делать этого). я вот своял за 5 минут. микродемку.

Размер модуля без компресси 10 701 байт вот если уменьшить до 1000 было б не плохо как решить не знаете случайно?

09ae_02.01.2020_EXELAB.rU.tgz - Find and Grib.7z




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 января 2020 10:13
· Личное сообщение · #25

SDK пишет:
разрешение уменьшил

Нет, у твоей хераборы 43х25 разрешение. Или 42х25. Сложно сказать, потому что ты картинку растянул. Очевидно чтобы потом сказать типа я придумал - закодировать пиксели исходного изображения (43х25) буквами и сжать текст. у нас получится ~ 700 байт - ого как пророчески. Сжатие-то где?

-----
2 оттенка серого




Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 02 января 2020 10:19
· Личное сообщение · #26

f13nd пишет:
Сжатие-то где?

Дык RLE же! Обходом по контуру, думаю, еще сильнее сожмется




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 января 2020 10:23
· Личное сообщение · #27

_MBK_ пишет:
Дык RLE же!

Я не сразу врубился зачем ты тремя аргументами задаешь элемент, rle это не про контуры. Ну наверное можно это сжать, пассажир просто не нагуглил до сих пор что такое сжатие и продолжает спешиал олимпикс со своими идеями сжатия на батниках.

-----
2 оттенка серого




Ранг: 63.5 (постоянный), 35thx
Активность: 0.280.96
Статус: Участник

Создано: 02 января 2020 10:34
· Личное сообщение · #28

Это просто первое, что мне пришло в голову как с яблофона позиционировать строки относительно друга.



Ранг: 54.0 (постоянный), 49thx
Активность: 0.711.1
Статус: Участник

Создано: 02 января 2020 10:45
· Личное сообщение · #29

f13nd ну запили что нибудь знатное с картинкой музыкой размером от 1 до 5 кб ( с разрешением до 640 на 500 ) можно на новогоднюю тематику




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 января 2020 10:53
· Личное сообщение · #30

SDK пишет:
ну запили что нибудь знатное

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

-----
2 оттенка серого



. 1 . 2 . 3 . >>
 eXeL@B —› Оффтоп —› Максимальная компрессия картинок

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати