Random Rust Dev
395 subscribers
102 photos
44 videos
1 file
33 links
Разработка на языке Rust.
Пишу простыни со своими мыслями о Rust и проектах на нем.
Download Telegram
Пора бы уже закончить жать картинки, но я всё никак не могу :)

Настрогал еще вариантов.
1. Реализовал rANS алгоритм
2. Поменял LZ77 и LZ78 на выдачу токенов.
3. Реализовал компрессию этих токенов через rANS.

Ну и в итоге как-то грустно, потому что от шага LZ* толку нету даже там, где, казалось бы, больше всего его должно было быть.
В итоге rANS сам по себе переплюнул LZ77 и LZ77+rANS на отфильтрованной картинке с кучей заливки.
Почему? А потому что энтропии очень мало. И не смотря на то что в токенах LZ средняя длина "повтора" около 95, rANS умудряется быть более эффективным.
Лучший результат буквально меньше, чем PNGшка
👍1
А вот уже настоящая текстура.
Здесь токены LZ77 имеют среднюю длину "повтора" в 1.77 в лучшем случае. Что приводит к результату даже большему, чем у несжатых данных.

А вот rANS опять сжал картинку лучше чем PNG.
👍3🔥1
Исправил LZ77 что бы тот не всегда кодировал референс, когда длина его слишком мала и дешевле закодировать литералы.
Размер уменьшился, стало прям сильно лучше, но все еще проигрывает чистому rANS-у фильтрованной картинки.
В том числе rANS-ирование токенов из LZ77.

Только на очень специфических картинка (как с драконом) можно получить лучший результат с LZ77 или LZ78.

А вот возьмем спрайтшит. А там... та же картина, да как так то?
Вывод - сделать N режимов, дать пользователю выбирать и кнопку "найти самый оптимальный".

Где пользователь, это тот кто напишет jkl = "1.0" у себя в Cargo.toml
А кнопка - функция
🔥2